Qメインウィンドウウィンドウ
メニューバー
ウィンドウの上部に 1 つだけあります
トップレベル メニューの場合、UI ウィンドウを直接ダブルクリックしてテキスト情報を直接入力できます。また、対応するサブメニュー項目を最初にダブルクリックして追加することもできますが、この方法は中国語入力をサポートしていません。
テキストを入力し、Enter キーを押して確定します。
セカンダリ メニュー バーを作成する機能
副メニューで中国語を入力する方法
新しいアクション ( action ) を作成するには
:
新しく作成したアクションを対応するメニュー リストにドラッグします。
効果:
対応するアクションをメニューバーに追加します
このうちメニューバーに対応するクラスがQActionで、
ユーザーがメニューバー内の特定のQActionをクリックするとトリガーシグナルが発せられます。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->createprogect1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下创建项目";
QMessageBox::information(this, "提示框",
"成功创建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->open_action,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开项目",
QMessageBox::Ok,
QMessageBox::Save);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
QMenu クラスの API メソッドを使用してメニュー項目を追加します
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction* a1;
a1 = ui->menu->addAction("打开老项目");
connect(a1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开老项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->createprogect1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下创建项目";
QMessageBox::information(this, "提示框",
"成功创建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->open_action,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开项目",
QMessageBox::Ok,
QMessageBox::Save);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
区切り文字も QAction クラスです
ツールバー
複数存在することができ、デフォルトで 1 つが提供され、ウィンドウを上下左右にドッキングできます。
ツールバーを追加
ステータスバーにコントロールを追加する
前の方法を使用して、QAction コントロールをステータス バーに追加できます。
- 新しいアクションを作成し
、そのアクションをツールバーにドラッグします。
シグナル関数とスロット関数を追加します。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction* a1;
a1 = ui->menu->addAction("打开老项目");
//菜单栏
connect(a1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开老项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->createprogect1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下创建项目";
QMessageBox::information(this, "提示框",
"成功创建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->open_action,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开项目",
QMessageBox::Ok,
QMessageBox::Save);
});
//工具栏
connect(ui->action_4,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下工具4";
QMessageBox::information(this, "提示框",
"点击了一下工具4",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->action_1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下工具1";
QMessageBox::information(this, "提示框",
"点击了一下工具1",
QMessageBox::Ok,
QMessageBox::Save);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
効果:
ツールバーは他のタイプのツールを追加します
// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);
// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);
// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);
// 添加分隔线
QAction *QToolBar::addSeparator()
ツールバーで、他のコンポーネントを追加し、スロット関数のメソッドを呼び出す信号を送信します。
ツールバーのプロパティ
QToolBarの継承関係を参照
可動属性値は True (上下左右にドッキング可能)
アイコンサイズの設定と表示アイコンまたはテキストの
設定に対応する機能は以下のとおりです。
複数のツールバーを追加する
Windows を使用して追加する
次に、前の QAction を右側のツールバーにドラッグします。
コードを使用して追加します
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
#include "QLineEdit"
#include "QPushButton"
#include "QLineEdit"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction* a1;
QAction* a2;
QAction* a4;
//QPushButton* b1= new QPushButton(this);
// b1->setText("搜索按钮");
// QLineEdit* e1 = new QLineEdit();
a1 = ui->menu->addAction("打开老项目");
//给工具栏添加单行输入框
ui->toolBar->addWidget(new QPushButton("搜索按钮"));
ui->toolBar->addWidget(new QLineEdit);
a4 = ui->toolBar->addAction("工具4");
//菜单栏
connect(a1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开老项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->createprogect1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下创建项目";
QMessageBox::information(this, "提示框",
"成功创建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->open_action,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下打开项目";
QMessageBox::information(this, "提示框",
"成功打开项目",
QMessageBox::Ok,
QMessageBox::Save);
});
//工具栏
connect(ui->action_4,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下工具4";
QMessageBox::information(this, "提示框",
"点击了一下工具4",
QMessageBox::Ok,
QMessageBox::Save);
});
connect(ui->action_1,&QAction::triggered,this,[=]{
qDebug()<<"点击了一下工具1";
QMessageBox::information(this, "提示框",
"点击了一下工具1",
QMessageBox::Ok,
QMessageBox::Save);
});
// connect(a2,&QAction::triggered,this,[=]{
// qDebug()<<"请输入搜索类容";
// QMessageBox::information(this, "提示框",
// "请输入搜索类容",
// QMessageBox::Ok,
// QMessageBox::Save);
// });
// connect(b1,&QAction::triggered,this,[=]{
// qDebug()<<"请输入搜索类容";
// QMessageBox::information(this, "提示框",
// "请输入搜索类容",
// QMessageBox::Ok,
// QMessageBox::Save);
// });
connect(a4,&QAction::triggered,this,[=]{
qDebug()<<"点击了工具4";
QMessageBox::information(this, "提示框",
"点击了工具4",
QMessageBox::Ok,
QMessageBox::Save);
});
//对于toolbar2的操作
QAction* a5;
a5 = ui->toolBar_2->addAction("新建项目");
connect(a5,&QAction::triggered,this,[=]{
qDebug()<<"点击新建项目";
QMessageBox::information(this, "提示框",
"点击了新建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
QPushButton *b5 = new QPushButton(this);
b5->setText("^_^");
//添加小控件
ui->toolBar_2->addWidget(b5);
connect(b5,&QPushButton::clicked,this,[=]{
qDebug()<<"点击了^_^";
QMessageBox::information(this, "提示框",
"点击了^_^",
QMessageBox::Ok,
QMessageBox::Save);
});
QLineEdit* l5 = new QLineEdit();
//添加小控件
ui->toolBar_2->addWidget(l5);
connect(l5,&QLineEdit::editingFinished,this,[=]{
qDebug()<<"完成输入";
QMessageBox::information(this, "提示框",
"完成了输入",
QMessageBox::Ok,
QMessageBox::Save);
});
//下方的工具栏
QToolBar* b6 = new QToolBar(this);
QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);
QAction* a6;
a6 = b6->addAction("新建项目");
connect(a6,&QAction::triggered,this,[=]{
qDebug()<<"点击新建项目";
QMessageBox::information(this, "提示框",
"点击了新建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
以下にツールバーを追加し、ツールバーに QAction コンポーネントを追加しました
下のツールバーで、非 QAction コンポーネントを追加します (QPushButton を使用します)。
//下方的工具栏
QToolBar* b6 = new QToolBar(this);
QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);
QAction* a6;
a6 = b6->addAction("新建项目");
connect(a6,&QAction::triggered,this,[=]{
qDebug()<<"点击新建项目";
QMessageBox::information(this, "提示框",
"点击了新建项目",
QMessageBox::Ok,
QMessageBox::Save);
});
QPushButton *pb6 = new QPushButton(this);
pb6->setText("退出");
//添加小控件
b6->addWidget(pb6);
connect(pb6,&QPushButton::clicked,this,[=]{
qDebug()<<"点击了退出";
QMessageBox::information(this, "提示框",
"点击了退出",
QMessageBox::Ok,
QMessageBox::Save);
});
ステータスバー
ウィンドウの下部に 1 つだけあります
ステータス バーにいくつかのコントロールを追加し、いくつかのプロパティを表示する必要があります。最もよく使用されるのは、ラベル QLabel を追加することです。
共通API
// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);
[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);
ステータス バーが表示されます。右側の三角形が灰色の点線で表示されます。
QLabelをステータスバーに追加し、ジャンプパスを設定します
//状态栏
QLabel* l7 = new QLabel();
l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));
ui->statusBar->addWidget(l7);
connect(l7,&QLabel::linkActivated,this,[=](QString url){
qDebug()<<"点击了状态栏label";
QMessageBox::information(this, "提示框",
"点击了状态栏label",
QMessageBox::Ok,
QMessageBox::Save);
QDesktopServices::openUrl(QUrl(url));
});
別の押しボタン ボタンを追加する
//状态栏
QLabel* l7 = new QLabel();
l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));
ui->statusBar->addWidget(l7);
connect(l7,&QLabel::linkActivated,this,[=](QString url){
qDebug()<<"点击了状态栏label";
QMessageBox::information(this, "提示框",
"点击了状态栏label",
QMessageBox::Ok,
QMessageBox::Save);
QDesktopServices::openUrl(QUrl(url));
});
// 再添加按钮
QPushButton* button = new QPushButton("状态栏的按钮");
ui->statusBar->addWidget(button);
connect(button,&QPushButton::clicked,this,[=](){
qDebug()<<"点击了状态栏label";
QMessageBox::information(this, "提示框",
"点击了状态栏pushbutton",
QMessageBox::Ok,
QMessageBox::Save);
});
ステータスバーへの情報の表示と表示情報のクリア
void MainWindow::on_pushButton_2_clicked()
{
//在状态栏显示信息
connect(ui->pushButton_2,&QPushButton::clicked,this,[=]{
ui->statusBar->showMessage("在状态栏显示的信息------------",0);
});
}
void MainWindow::on_pushButton_clicked()
{
//清空状态栏清空显示的信息
connect(ui->pushButton,&QPushButton::clicked,this,[=]{
ui->statusBar->clearMessage();
});
}
表示情報
明確な情報
プロジェクト開発において、チャンピオンバーの表示情報をステータスバーコントロールと併用することは推奨されません(カバレッジの問題があります)
ドッキングウィンドウ(ドッキングウィジェット)
デフォルトでは提供されていませんが、複数存在することができます。ウィンドウは上下左右にドッキングできます。
ドッキング ウィンドウは、マウスをドラッグすることでウィンドウの上下左右にドッキングするか、ウィンドウの上にフローティングすることができます。
ドッキングされたウィンドウが非 QMainWindow タイプのウィンドウに追加された場合、このウィンドウは移動したりフローティングしたりすることはできません。
フローティング ウィンドウはツールバーにあり、UI インターフェイスにドラッグするだけです。
使いやすい
プロパティパネル
プロパティパネルまたは関数を使用して変更できます。
コントロールを追加する
ドラッグアンドドロップしてください
それから情報窓口に電話してください
void MainWindow::on_pushButton_3_clicked()
{
connect(ui->pushButton_3,&QPushButton::clicked,this,[=]{
QMessageBox::critical(ui->dockWidget, "标题", "内容", QMessageBox::Apply, QMessageBox::Reset);
qDebug()<<"点击了一下";
});
}
既存の問題
1 回目のクリック: プロンプト ボックスは表示されません
2 回目のクリック:
3 回目のクリック:
二度呼ばれた
4 回目のクリック:
3 回呼び出されます。。。。。
解決
クリック コントロールのスロット関数でメッセージボックスを直接呼び出すだけで、再度接続する必要はありません。。。。
void MainWindow::on_pushButton_3_clicked()
{
qDebug()<<"点击了一下";
// connect(ui->pushButton_3,&QPushButton::clicked,this,[=]{
// //QMessageBox::critical(ui->dockWidget, "标题", "内容", QMessageBox::Apply, QMessageBox::Reset);
// QMessageBox::information(this, "提示框",
// "点击了^_^",
// QMessageBox::Ok,
// QMessageBox::Save);
// qDebug()<<"调用了一次message";
// });
QMessageBox::information(this, "提示框",
"点击了一下浮动窗口中的控件",
QMessageBox::Ok,
QMessageBox::Save);
}