QMainWindow核心控件及QDialog对话框使用

QMenuBar菜单栏

menuBar()

QMainWindow内部方法,返回唯一菜单栏

setMenuBar(QMenuBar *menubar)

QMainWindow设置菜单栏

addMenu(QMenu *menu)

addMenu(const QString &title)

添加菜单

QMenu菜单

addAction(QAction *action)

添加菜单项

addSeparator()

添加分隔线

addMenu(QMenu *menu)

addMenu(const QString &title)

添加菜单

QAction菜单项

信号

triggered

点击触发

QToolBar工具栏

addToolBar(QToolBar *toolbar)

addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)

QMainWindow添加工具栏

area: 默认停靠位置

setAllowedAreas(Qt::ToolBarAreas areas)

设置工具栏允许停靠位置

• Qt::LeftToolBarArea 停靠在左侧

• Qt::RightToolBarArea 停靠在右侧

• Qt::TopToolBarArea 停靠在顶部

• Qt::BottomToolBarArea 停靠在底部

• Qt::AllToolBarAreas 以上四个位置都可停靠

setFloatable(bool floatable)

设置是否可浮动

setMovable(bool movable)

设置是否可移动

QStatusBar状态栏

statusBar()

QMainWindow内部方法,返回唯一状态栏

setStatusBar(QStatusBar *statusbar)

QMainWindow设置状态栏

showMessage(const QString &text, int timeout = 0)

设置状态栏实时消息,timeout超时时间,为0永久显示

addWidget(QWidget *widget)

添加控件,从左侧开始
addPermanentWidget(QWidget *widget)添加控件,从右侧开始

QDockWidget浮动窗口

addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

QMainWindow添加浮动窗口

area默认停靠位置

setAllowedAreas(Qt::DockWidgetAreas areas)

设置允许停靠位置

• Qt::LeftDockWidgetArea 停靠在左侧

• Qt::RightDockWidgetArea 停靠在右侧

• Qt::TopDockWidgetArea 停靠在顶部

• Qt::BottomDockWidgetArea 停靠在底部

• Qt::AllDockWidgetAreas 以上四个位置都可停靠

QWidget中心部件

setCentralWidget(QWidget *widget)

QMainWindow添加中心部件

对话框

模态对话框

        阻塞式对话框,使用QDialog::exec()函数调用。

QDialog *dialog = new QDialog();
dialog->exec();
delete dialog;

非模态对话框

        非阻塞式对话框,使用QDialog::show()函数调用。

QDialog *dialog = new QDialog();
// 设置自动释放,当对话框关闭时自动释放对象
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();

内置对话框

QMessageBox消息对话框

        QMessageBox强制用户进行操作,内置了四种类型,并提供了相应的静态函数。

QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton);

QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

参数说明:

返回值:点击了的按钮。

代码示例:

QPushButton *button1 = new QPushButton("消息对话框");
layout->addWidget(button1,0,0);
connect(button1,&QPushButton::clicked,this,[this]{
    QMessageBox::StandardButton result = QMessageBox::question(this,"消息对话框","是否继续");
    if(result == QMessageBox::Yes)
        qDebug() << "Yes";
    else if(result == QMessageBox::No)
        qDebug() << "No";
});

QColorDialog颜色对话框

QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());

参数说明:

返回值:选中颜色。

代码示例:

QPushButton *button2 = new QPushButton("颜色对话框");
layout->addWidget(button2,0,1);
connect(button2,&QPushButton::clicked,this,[this]{
    QColor color = QColorDialog::getColor(QColor(200,100,190),this,"选择颜色");
    qDebug() << color;
});

QFileDialog文件对话框

QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

QStringLIst getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

参数说明:

caption:标题。

filter:文件过滤器。

返回值:文件路径+文件名。

代码示例:

QPushButton *button3 = new QPushButton("文件对话框");
layout->addWidget(button3,0,2);
connect(button3,&QPushButton::clicked,this,[this]{
   QMessageBox::StandardButton selectButton = QMessageBox::question(this,"选择","请选择文件交互方式",QMessageBox::Save | QMessageBox::Open);
   if(selectButton == QMessageBox::Open)
   {
       QStringList fileUrls = QFileDialog::getOpenFileNames(this,"选择文件","/","*.txt");
       qDebug() << fileUrls;
   }
   else if(selectButton == QMessageBox::Save)
   {
       QString fileUrl = QFileDialog::getSaveFileName(this,"选择文件","/","*.txt");
       qDebug() << fileUrl;
   }
});

QFontDialog字体对话框

QFont getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());

QFont getFont(bool *ok, QWidget *parent = nullptr);

参数说明:

ok:点击ok返回true,点击cancel或关闭对话框返回false。

initial:默认选择字体。

返回值:选中字体。

代码示例:

QPushButton *button4 = new QPushButton("字体对话框");
layout->addWidget(button4,0,3);
connect(button4,&QPushButton::clicked,this,[this]{
   bool result;
   QFont selectFont = QFontDialog::getFont(&result,this);
   qDebug() << result << selectFont;
});

QInputDialog输入对话框

        

1、双精度浮点型输入数据对话框

double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

2、整型输入数据对话框

int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

3、选择条目型输入对话框

QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

参数说明:

items:条目列表。

返回值:返回输入框内容。

代码示例:

QPushButton *button5 = new QPushButton("输入对话框");
layout->addWidget(button5,1,0);
connect(button5,&QPushButton::clicked,this,[this]{
   QMessageBox *messageBox = new QMessageBox(this);
   messageBox->setWindowTitle("输入对话框");
   messageBox->setIcon(QMessageBox::Question);
   messageBox->setText("选择对话框类型");
   QPushButton *inputButton1 = new QPushButton("整型");
   QPushButton *inputButton2 = new QPushButton("浮点型");
   QPushButton *inputButton3 = new QPushButton("条目类型");
   messageBox->addButton(inputButton1,QMessageBox::ActionRole);
   messageBox->addButton(inputButton2,QMessageBox::ActionRole);
   messageBox->addButton(inputButton3,QMessageBox::ActionRole);
   // 使用addButton添加一个以上的按钮会导致对话框右上角关闭置灰,增加一个隐藏标准按钮即可显示。
   messageBox->addButton(QMessageBox::No)->setHidden(true);
   messageBox->exec();
   QPushButton *buttonClicked = (QPushButton *)messageBox->clickedButton();
   if(inputButton1 == buttonClicked)
   {
       qDebug() << QInputDialog::getInt(this,"输入对话框","输入整数");
   }
   else if(inputButton2 == buttonClicked)
   {
       qDebug() << QInputDialog::getDouble(this,"输入对话框","输入浮点数");
   }
   else if(inputButton3 == buttonClicked)
   {
       qDebug() << QInputDialog::getItem(this,"输入对话框","选择条目",{"Java","C++"});
   }
});

QProgressDialog进度条对话框

代码示例:

QPushButton *button6 = new QPushButton("进度条对话框");
layout->addWidget(button6,1,1);
connect(button6,&QPushButton::clicked,this,[this]{
    QProgressDialog *progress = new QProgressDialog(this);
    progress->setWindowTitle("进度条");
    progress->setLabelText("当前进度");
    progress->setValue(0);
    progress->setRange(0,100);
    QTimer *timer = new QTimer(this);
    timer->start(100);
    connect(timer,&QTimer::timeout,this,[progress,timer]{
        if(progress->value() == 100)
            timer->stop();
        else
            progress->setValue(progress->value() + 1);
    });
    progress->exec();
    timer->stop();
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值