Qt編程基礎入門之二
QMainWindow
菜單欄
菜單欄 最多有一個
//菜單欄創建,一個
QMenuBar *menu = new QMenuBar(this);
// this->setMenuBar(menu);
//創建菜單
QMenu *file_menu = menu->addMenu("文件");
QMenu *edit_menu = menu->addMenu("編輯");
//創建菜單項
QAction *new_action = file_menu->addAction("新建");
//添加分割線
file_menu->addSeparator();
QAction *open_action = file_menu->addAction("打開");
工具欄
可以有多個。可以添加菜單項或者小控制項
//工具欄,多個
QToolBar *tool = new QToolBar(this);
this->addToolBar(Qt::RightToolBarArea, tool);
tool->addAction("1");
tool->addAction("2");
//只允許左右停靠
tool->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//禁用 浮動
tool->setFloatable(false);
tool->addAction(new_action);
//添加控制項
QPushButton *btn = new QPushButton("hello", this);
tool->addWidget(btn);
//禁用移動
tool->setMovable(false);
狀態欄
//狀態欄,一個
QStatusBar *status = new QStatusBar(this);
setStatusBar(status);
//標籤控制項
QLabel *label = new QLabel("提示資訊",this);
status->addWidget(label);
QLabel *label2 = new QLabel("右側提示資訊", this);
status->addPermanentWidget(label2);
鉚接部件
//鉚接部件,多個
QDockWidget *dock = new QDockWidget("浮動", this);
addDockWidget(Qt::BottomDockWidgetArea, dock);
//設置後期停靠區域,只允許上下
dock->setAllowedAreas(Qt::TopDockWidgetArea);
中心部件
//中心部件,一個
QTextEdit *text_edit = new QTextEdit(this);
setCentralWidget(text_edit);
對話框
模態與非模態
對話框分為模態和非模態。模態就是不能對其他窗口進行操作,因為被阻塞了。非模態是可以對其他窗口進行操作的。區別就在於是對象創建區域和顯示方式。
//彈出一個對話框
connect(ui->actionnew, &QAction::triggered, [&](){
//對話框 分類
//模態對話框(不可以對其他窗口進行操作)和非模態對話框(可以對其他窗口進行操作)
//模態創建 阻塞
// QDialog dlg(this);
// dlg.resize(240, 240);
// dlg.exec();
// qDebug() << "模態對話框彈出了";
//非模態對話框
//QDialog dlg2(this);//這種方法窗口會一閃而過,因為對象在棧裡面,退出函數之後會導致數據消失
//dlg2.show();
//new的數據存放在堆裡面,需要手動釋放才會消失
QDialog *dlg2 = new QDialog(this);
dlg2->setAttribute(Qt::WA_DeleteOnClose);//這樣在關閉對話窗口的時候會刪除該數據,避免記憶體泄漏
dlg2->show();
});
消息對話框
//錯誤對話框
// QMessageBox::critical(this, "critical", "錯誤");
//資訊對話框
// QMessageBox::information(this, "info", "資訊");
//question
//父窗口, title, text, 選項, 默認選項
// if(QMessageBox::Save == QMessageBox::question(this,
// "question", "問題",
// (QMessageBox::Save|QMessageBox::Cancel),
// QMessageBox::Cancel)){
// qDebug() << "You select save";
// }
// else{
// qDebug() << "You select cancel";
// }
//警告
QMessageBox::warning(this, "warning", "警告");
顏色選取
//顏色
QColor color = QColorDialog::getColor();
qDebug() << "r = " << color.red() << "g = " << color.green() << "b = " << color.green();
文件選擇
//文件選取對話框
//父窗口、標題、默認路徑、要求文件後綴
// QString file_name = QFileDialog::getOpenFileName(this, "打開文件", "D:\\Users\\wangzhankun\\qt\\test", "*.cpp");
// qDebug() << file_name;
qDebug() << QFileDialog::getExistingDirectory(this, "打開文件夾");
字體選擇
bool flag = true;
QFont font = QFontDialog::getFont(&flag, QFont("華文彩雲", 36), this);
qDebug() << "字體" << font.family()
<< "字型大小" << font.pointSize()
<< "是否加粗" << font.bold()
;
登錄窗口布局
-
實現登陸窗口
-
利用布局方式 給窗口進行美化
-
選取 widget 進行布局 ,水平布局、垂直布局、柵格布局
-
給用戶名、密碼、登陸、退出按鈕進行布局
-
默認窗口和控制項之間 有9像素間隙,可以調整 layoutLeftMargin
-
利用彈簧進行布局
-
sizePolicy控制widget高度是否與內容一致
-
echoMode修改為password