Qt編程基礎入門之二

QMainWindow

1588943662681

菜單欄

菜單欄 最多有一個

//菜單欄創建,一個
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()
    ;

登錄窗口布局

  1. 實現登陸窗口

  2. 利用布局方式 給窗口進行美化

  3. 選取 widget 進行布局 ,水平布局、垂直布局、柵格布局

  4. 給用戶名、密碼、登陸、退出按鈕進行布局

  5. 默認窗口和控制項之間 有9像素間隙,可以調整 layoutLeftMargin

  6. 利用彈簧進行布局

  7. sizePolicy控制widget高度是否與內容一致

  8. echoMode修改為password

Tags: