做網(wǎng)站合肥百度搜索推廣平臺
4-主窗口
- 1、簡介
- 2 菜單欄、工具欄、狀態(tài)欄
- 2.1 菜單欄
- 2.2 QAction
- 2.3 工具欄
- 2.4 狀態(tài)欄
- 3 混合方式UI設計
1、簡介
- QMainWindow是一個為用戶提供主窗口程序的類,包含一個菜單欄、多個工具欄、多個??靠丶?、一個狀態(tài)欄以及一個中心控件,是許多應用程序(比如文本編輯器、圖片編輯器等)的基礎。
- 主窗口具有自己的布局管理器,因此不允許在主窗口上設置或創(chuàng)建布局管理器。但是在中心控件上可以設置。
2 菜單欄、工具欄、狀態(tài)欄
2.1 菜單欄
- 菜單是一些列命令的列表
- 為了實現(xiàn)菜單、工具欄按鈕、鍵盤快捷方式等命令的一致性,Qt使用動作(QAction)來表示這些命令
- Qt的菜單就是由一系列的QAction動作對象構成的列表
- 菜單欄是包含菜單的面板,位于主窗口標題欄的下面
- 一個主窗口只能有一個菜單欄
2.2 QAction
- QAction類提供了抽象的用戶界面action,這些action可以被放置在窗口控件中
- QAction可以被添加到菜單和工具欄中,并且可以自動保持在菜單和工具欄中的同步。
- QAction是可以作為獨立的對象被創(chuàng)建,也可以在構建菜單時創(chuàng)建。
- QAction可以包含一個圖標、菜單文本、快捷鍵、狀態(tài)文本等。
- 只有將QAction添加到窗口控件上,才可以使用這些QAction。
2.3 工具欄
- 工具欄是由一系列的類似于按鈕的動作排列而成的面板,它通常由一些經(jīng)常使用的命令(動作)組成
- 工具欄位于菜單欄的下面、狀態(tài)欄的上面,可以??吭谥鞔翱诘纳舷伦笥宜膫€方向
- 一個主窗口可以包含多個工具欄
2.4 狀態(tài)欄
- 提供一個用于展示狀態(tài)信息的水平欄
3 混合方式UI設計
- 可視化UI設計無需人工編寫代碼區(qū)處理大量繁瑣的界面組件的創(chuàng)建和布局管理工作,可以直觀地進行界面設計,大大提高工作效率。但某些組件無法可視化地添加到界面上。
- 采用純代碼方式進行UI設計雖然無所不能,但是設計效率太低,過程非常繁瑣。
- 混合方式創(chuàng)建UI,即部分界面設計用UI設計器可視化實現(xiàn),部分無法在UI設計器里實現(xiàn)的界面設計用代碼實現(xiàn)。
案列:實現(xiàn)下面的窗口及其功能
1: 新建工程名為Editor,基類是QMainWindow,UI組件選擇Text Edit,在窗口上選擇控件-》視圖-》action editor,在彈出的窗口中,新建下面的選項
2:設計菜單欄
在窗口上方輸入文件,然后將action控件拖入其中
將控件拖入,當上方出現(xiàn)紅色線條時,就說明成功了
然后依次完成以下頁面的設計
3:設計工具欄
在窗口空白處單擊,選擇添加工具欄,依次將action控件拖入其中,效果如下
4:設計相關的槽函數(shù),其中粘貼、剪切、復制、退出和清空不需要我們自定義槽函數(shù),可以在頁面上選擇,其他均需要生成對應的槽函數(shù)。頁面可選擇如下:
自己選擇的如下:
其中粗體、斜體、下劃線、工具欄、狀態(tài)欄是需要選擇triggered(bool checked)這個槽函數(shù)的
在Text Edit控件中需要選擇兩個槽函數(shù)
5:根據(jù)原圖,我們還需要字體和字號的控件,這倆需要我們自己書寫定義
private:
// 自定義的槽函數(shù)void on_m_combFontName_currentIndexChanged(const QString &fontName);void on_m_spinFontSize_valueChanged(int fontSize);
// 變量QFontComboBox * m_combFontName;// 字體組合框對象指針QSpinBox* m_spinFontSize;// 存儲字號QLabel* m_labCurFile;//當前文件
6:書寫邏輯,源文件如下
EditorWindow::EditorWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::EditorWindow)
{ui->setupUi(this);// 設置中心組件setCentralWidget(ui->m_edit);// 設計工具欄ui->toolBar->addSeparator();// 添加分隔符 在當前工具欄的末尾添加ui->toolBar->addWidget(new QLabel(" 字體大小:"));// 字號大小m_spinFontSize = new QSpinBox; // 字號選擇框m_spinFontSize->setMinimumWidth(60);//最小的寬度m_spinFontSize->setRange(8,72);// 字號大小的范圍ui->toolBar->addWidget(m_spinFontSize);ui->toolBar->addWidget(new QLabel(" 字體名稱:")); // 字體名稱m_combFontName = new QFontComboBox;// 字體選擇框m_combFontName->setMinimumWidth(80);//最小的寬度ui->toolBar->addWidget(m_combFontName);m_labCurFile = new QLabel("當前文件: "); // 添加尾部狀態(tài)欄m_labCurFile->setMinimumWidth(400);ui->statusbar->addWidget(m_labCurFile);//建立信號和槽的連接// 字體選擇connect(m_combFontName,SIGNAL(currentIndexChanged(QString)),this,SLOT(on_m_combFontName_currentIndexChanged(QString)));// 字號選擇connect(m_spinFontSize,SIGNAL(valueChanged(int)),this,SLOT(on_m_spinFontSize_valueChanged(int)));
}
// 新建的槽函數(shù)
void EditorWindow::on_m_actNew_triggered(){QMessageBox::information(this,windowTitle(),"新建 文件 等待 處理");
}
// 打開的槽函數(shù)
void EditorWindow::on_m_actOpen_triggered()
{QMessageBox::information(this,windowTitle(),"打開 文件 等待 處理");}// 粗體的槽函數(shù)void EditorWindow::on_m_actBold_triggered(bool checked){QTextCharFormat fmt;fmt.setFontWeight(checked ? QFont::Bold : QFont::Normal);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 斜體的槽函數(shù)
void EditorWindow::on_m_actItalic_triggered(bool checked)
{QTextCharFormat fmt;fmt.setFontItalic(checked);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 下劃線的槽函數(shù)
void EditorWindow::on_m_actUnderline_triggered(bool checked)
{QTextCharFormat fmt;fmt.setFontUnderline(checked);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 狀態(tài)欄的槽函數(shù)
void EditorWindow::on_m_actStatusbar_triggered(bool checked)
{ui->statusbar->setHidden(!checked);
}
// 工具欄的槽函數(shù)
void EditorWindow::on_m_actToolbar_triggered(bool checked)
{ui->toolBar->setHidden(!checked);
}
// 關于的槽函數(shù)
void EditorWindow::on_m_actAbout_triggered()
{QMessageBox::information(this,windowTitle(),"關于 文件 等待 處理");
}
// 文本框 可復制槽函數(shù)
//何時m_edit中的信息可以被拷貝 - 復制/剪切
//如果不能復制和剪切 - 將兩個QAction禁用
//文本框 文字改變槽函數(shù)
void EditorWindow::on_m_edit_copyAvailable(bool b)
{// 復制使能ui->m_actCopy->setEnabled(b);// 剪切使能ui->m_actCut->setEnabled(b);
}
// 文本發(fā)生改變的 槽函數(shù) 文本發(fā)生改變時判斷是否可以清空
void EditorWindow::on_m_edit_textChanged()
{ui->m_actClear->setEnabled(ui->m_edit->toPlainText().size());
}
// 文本框 文本選擇改變槽函數(shù)
void EditorWindow::on_m_edit_selectionChanged()
{// 當有文本選中時,查看對應文本已經(jīng)設置的格式QFont font = ui->m_edit->currentFont();ui->m_actBold->setChecked(font.bold());//粗體ui->m_actItalic->setChecked(font.italic());//斜體ui->m_actUnderline->setChecked(font.underline());//下劃線m_combFontName->setCurrentFont(font);// 字體m_spinFontSize->setValue(font.pointSize());
}
// 字體變化槽函數(shù)
void EditorWindow::on_m_combFontName_currentIndexChanged(const QString &fontName){QTextCharFormat fmt;fmt = ui->m_edit->currentCharFormat();fmt.setFontFamily(fontName);ui->m_edit->mergeCurrentCharFormat(fmt);
}
// 字號變化槽函數(shù)
void EditorWindow::on_m_spinFontSize_valueChanged(int fontSize){QTextCharFormat fmt;fmt = ui->m_edit->currentCharFormat();fmt.setFontPointSize(fontSize);ui->m_edit->mergeCurrentCharFormat(fmt);
}