QtWidget 自定义不规则窗体与按钮
qt窗口布局及自定义类
需要 this
rightLayout->addStretch(1);
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(30); mainLayout->setSpacing(6); mainLayout->addLayout(leftLayout); mainLayout->addLayout(rightLayout); }
finddialog.h (4)
private: QLabel *label; QLineEdit *lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton; }; #endif
class FindDialog : public QDialog { Q_OBJECT public: FindDialog(QWidget *parent = 0, const char *name = 0); signals: void findNext(const QString &str, bool caseSensitive); void findPrev(const QString &str, bool caseSensitive); private slots: void findClicked(); void enableFindButton(const QString &text);
qt窗口布局及自定义类qt自定义窗口qt自定义控件qt自定义信号qt自定义事件android自定义布局qt布局qtcreator布局qt布局管理器qtdesigner布局
qt的窗口部件基础知识
qt的窗口部件基础知识Qt是一个跨平台的C++应用程序开发框架,提供了丰富的GUI(图形用户界面)库,用于创建各种窗口部件(widget)和用户界面。
本文将介绍Qt窗口部件的基础知识,包括窗口部件的概念、如何创建和使用窗口部件,以及常见的窗口部件类和用法。
一、窗口部件的概念窗口部件是Qt中最基本的GUI元素,用于构建用户界面。
每个窗口部件都是一个独立的可视化对象,可以包含其他窗口部件,形成复杂的用户界面。
窗口部件提供了丰富的功能,包括绘图、事件处理、布局管理等。
二、创建和使用窗口部件在Qt中,可以使用Qt Creator或者手动编写代码来创建和使用窗口部件。
1. 使用Qt Creator创建窗口部件Qt Creator是Qt集成开发环境(IDE),提供了可视化的图形界面设计器,可以方便地创建和编辑窗口部件。
在Qt Creator中,可以通过拖拽窗口部件到界面上来创建窗口部件,然后使用属性编辑器来设置窗口部件的属性和信号槽。
可以通过预览功能查看窗口部件的外观和布局。
2. 手动编写代码创建窗口部件可以通过编写C++代码手动创建窗口部件。
首先需要包含相应的头文件,例如:#include<QWidget>、#include <QLabel>。
然后可以使用相应的类来创建窗口部件对象,例如:QWidget *widget = new QWidget()、QLabel *label = new QLabel("Hello World");三、常见的窗口部件类和用法Qt提供了丰富的窗口部件类,下面介绍一些常见的窗口部件类和它们的用法。
1. QWidget:是所有窗口部件的基类,可以作为其他窗口部件的容器。
可以设置窗口的标题、大小、位置等属性,处理窗口的事件。
2. QLabel:用于显示文本或图像。
可以设置文本、字体、对齐方式等属性,可以加载图像文件。
3. QPushButton:用于创建按钮。
qt实现不规则窗口的方法
qt实现不规则窗口的方法一、前言Qt是一个强大的跨平台开发框架,它提供了丰富的API和工具,使得开发者能够轻松地创建各种类型的应用程序。
在Qt中,窗口是应用程序的重要组成部分,而不规则窗口的实现则可以让应用程序更加具有个性化和视觉吸引力。
本文将介绍如何使用Qt实现不规则窗口的方法。
二、不规则窗口的实现方法1. 使用自定义窗口类在Qt中,可以通过继承QMainWindow或QDialog类,并重写其中的一些方法来实现不规则窗口。
首先,需要定义一个自定义窗口类,并在其中重写windowRect()和sizeHint()方法,以获取窗口的尺寸和形状。
然后,可以使用setWindowFlags()方法来设置窗口的样式,以实现不规则窗口的效果。
2. 使用布局管理器Qt提供了多种布局管理器,如QHBoxLayout、QVBoxLayout、QGridLayout等,这些布局管理器可以根据需要自动调整窗口的大小和位置。
通过使用布局管理器,可以将不规则形状的窗口部件放置在窗口中,并自动调整窗口的大小和位置,以达到不规则窗口的效果。
3. 使用形状控件Qt提供了一些形状控件,如QFrame、QPushButton等,这些控件可以设置不同的形状,如矩形、圆形、椭圆形等。
通过将这些形状控件放置在窗口中,并使用布局管理器自动调整它们的位置和大小,可以实现不规则窗口的效果。
三、示例代码下面是一个简单的示例代码,展示了如何使用自定义窗口类和布局管理器实现不规则窗口:```cpp#include <QApplication>#include <QMainWindow>#include <QVBoxLayout>#include <QWidget>class IrregularWindow : public QWidget {public:IrregularWindow(QWidget *parent = nullptr) : QWidget(parent) {}void setShape(QRect rect) {m_shape = rect;update();}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.drawRect(m_shape);}private:QRect m_shape;};int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget *centralWidget = new QWidget;QVBoxLayout *layout = new QVBoxLayout(centralWidget);QWidget *widget1 = new IrregularWindow;widget1->setWindowFlags(widget1->windowFlags() | Qt::FramelessWindowHint);widget1->setShape(QRect(50, 50, 200, 100));layout->addWidget(widget1);QWidget *widget2 = new QPushButton("Button");layout->addWidget(widget2);QWidget *widget3 = new QFrame(centralWidget);widget3->setFrameShape(QFrame::Rectangle);layout->addWidget(widget3);centralWidget->show();return app.exec();}```在上面的代码中,我们创建了一个自定义窗口类IrregularWindow,它继承自QWidget,并重写了paintEvent()方法来绘制自定义的形状。
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例
QT新建一个窗口控制程序以实现添加按钮点击弹出信息提示框为例为了实现添加按钮点击弹出信息提示框的功能,我们可以使用Qt来创建一个窗口控制程序。
首先,我们需要创建一个Qt窗口应用程序项目。
在Qt Creator中选择"新建项目",然后选择"C++"和"Qt Widgets应用",填写项目名称和路径,然后点击"下一步"。
在下一个界面,可以选择使用预设的窗口模板。
选择一个适合的窗口模板,例如"MainWindow",然后点击"下一步"。
接下来,在"项目管理器"中,展开源文件夹,找到"mainwindow.cpp"文件。
双击打开该文件。
在"mainwindow.cpp"文件中,我们需要添加按钮和相应的点击事件。
如果不存在"MainWindow"类的构造函数,则需要手动创建构造函数。
我们可以在构造函数中添加按钮。
```cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)ui->setupUi(this);//创建按钮QPushButton *btn = new QPushButton("添加按钮", this);btn->setGeometry(100, 100, 100, 30);//连接按钮的点击事件到槽函数connect(btn, SIGNAL(clicked(), this, SLOT(showMessageBox());MainWindow::~MainWindowdelete ui;//槽函数:点击按钮弹出信息提示框void MainWindow::showMessageBoxQMessageBox::information(this, "提示", "按钮已点击");```在上面的代码中,我们首先在构造函数中创建了一个按钮,并设置了按钮的位置和尺寸。
QtWidget 自定义不规则窗体与按钮
关键是使用void QWidget::setMask ( const QBitmap & bitmap )void QWidget::setMask ( const QRegion & region )void QWidget::setMask ( const QRegion & region )Causes only the parts of the widget which overlap region to be visible.只有widget与region重叠的地方才会显示出来. 自己构造一个QRegion就行了.void ShapedClock::resizeEvent(QResizeEvent * /* event */) {int side = qMin(width(), height());QRegion maskedRegion(width() / 2 - side / 2, height() / 2 - side / 2, side,side, QRegion::Ellipse);setMask(maskedRegion);}void QWidget::setMask ( const QBitmap & bitmap )Causes only the pixels of the widget for which bitmap has a corresponding 1 bit to be visible. If the region includes pixels outside the rect() of the widget, window system controls in that area may or may not be visible, depending on the platform.只有在bitmap中像素数据是1的地方才会显示出widget的相应像素来. Bitmap就是像素数据只有两个值: 0和1 (1 bit-depth, monochrome).QLabel topLevelLabel;QPixmap pixmap(":/images/tux.png");topLevelLabel.setPixmap(pixmap);topLevelLabel.setMask(pixmap.mask()); // 可以不使用转换的, 使用一张专门的bitmap图片.上面的这些方式用一普通的QWidget就可以了. 当然, 对于窗口而言, 很多时候我们要把它的标题栏去掉:widget->setWindowFlags(Qt::FramelessWindowHint);但是对于不规则的QPushButton就有些特殊, 要使用QIcon来处理:button->setIcon(QIcon("xxx.png"));button->setIconSize(w, h);button->setMask(maskBitmap/*maskedRegion*/);button->setFixedSize(w, h); // 这个当然最好使用它的icon的大小.。
qt中创建两个界面的方法 -回复
qt中创建两个界面的方法-回复在Qt中创建两个界面的方法可以通过以下步骤来完成。
首先,我们需要创建一个Qt项目,在项目中添加两个界面,并确保它们之间可以进行切换和交互。
第一步:创建Qt项目1. 打开Qt Creator,选择"New Project"创建一个新的Qt项目。
2. 在项目类型中选择"Qt Widgets Application",然后点击"Choose"按钮。
3. 输入项目名称和位置,点击"Next"按钮,并按照向导的指示完成项目的创建。
第二步:添加两个界面1. 在Qt Creator的"Projects"窗口中,展开项目文件,找到"Forms"文件夹。
2. 鼠标右键点击"Forms"文件夹,选择"Add New",然后选择"Qt Designer Form Class"。
3. 在弹出的对话框中,选择"Widget"作为基类,点击"Choose"按钮。
4. 输入界面名称,然后点击"Next"按钮,并按照向导的指示完成界面的创建。
5. 重复以上步骤,添加第二个界面。
第三步:切换和交互界面1. 首先,在Qt Creator的"Projects"窗口中展开项目文件,找到"Sources"文件夹。
2. 找到项目名称.cpp文件,例如"main.cpp",双击打开该文件。
3. 在main函数中,创建主窗口并显示。
4. 添加一个按钮或菜单项,并连接到一个槽函数,用于在点击时切换到第二个界面。
5. 在槽函数中,创建一个新的窗口,并确保它与主窗口控制一致。
6. 使用窗口切换方法或功能来切换到第二个界面。
这可以是堆栈窗口,标签窗口或其他自定义界面切换机制。
qt 按钮的用法
Qt按钮的用法Qt是一个跨平台的C++应用程序开发框架,提供了丰富的GUI(图形用户界面)组件和工具。
其中,按钮是Qt中最常用和重要的控件之一。
在本文中,我们将详细介绍Qt按钮的用法,包括创建按钮、设置按钮属性、处理按钮点击事件等。
1. 创建按钮在Qt中创建一个按钮非常简单。
可以通过以下步骤来实现:#include <QPushButton>// 创建一个父级窗口QWidget *parent = new QWidget;// 创建一个按钮QPushButton *button = new QPushButton("Click me", parent);// 设置按钮位置和大小button->setGeometry(100, 100, 200, 50);// 显示窗口和按钮parent->show();button->show();上述代码首先包含了QPushButton头文件,然后创建了一个父级窗口对象parent和一个按钮对象button。
接下来,使用setGeometry()方法设置了按钮的位置和大小,并使用show()方法显示了窗口和按钮。
2. 设置按钮属性除了基本的位置和大小设置外,我们还可以为按钮设置其他属性,如文本、图标、样式等。
下面是一些常用的设置方法:2.1 设置文本可以使用setText()方法为按钮设置文本内容:button->setText("Click me");2.2 设置图标可以使用setIcon()方法为按钮设置图标:button->setIcon(QIcon(":/icons/button_icon.png"));其中:icons/button_icon.png是按钮图标的路径。
2.3 设置样式可以使用setStyleSheet()方法为按钮设置样式:button->setStyleSheet("background-color: blue; color: white;");上述代码将按钮的背景色设置为蓝色,文本颜色设置为白色。
Qt窗口的一些简单设置-标题、图标、最大化最小化按钮、任务栏图标
Qt窗⼝的⼀些简单设置-标题、图标、最⼤化最⼩化按钮、任务栏图标零零碎碎看了很多Qt例⼦,有⼀些很零散的窗体控制⽅法,在这总结⼀些。
1.更改窗体标题this->setWindowTitle("窗体标题");窗体标题”就是更改的窗体标题2.控制窗体⼤⼩1this->setMaximumSize(300,300); //窗体最⼤尺⼨2this->setMinimumSize(300,300); //窗体最⼩尺⼨3this->setMinimumHeight(300); //单独设置窗体⾼的最⼩值4this->setMaximumWidth(300); //单独设置窗体宽的最⼩值也可以通过窗体布局控制窗体⼤⼩1 QGridLayout *mainLayout = new QGridLayout; //窗体中控件为⽹格布局2 mainLayout->setSizeConstraint(QLayout::SetFixedSize); //布局⼤⼩不变在构造函数中的这个函数强制设置窗体的布局为固定⼤⼩,⽤户不可⾃⾏调整对话框⼤⼩。
布局管理器将会负责调整⼤⼩的任务,当⼀些⼦窗⼝期间显⽰或隐藏的时候⾃动的调整对话框的⼤⼩,以保证对话框总是以优化了的⼤⼩显⽰。
在官⽅⽂档中setSizeConstraint给的解释为:sizeConstraint:SizeConstraint. This property holds the resize mode of the layout.这个函数主要是通过布局管理器对布局⼤⼩进⾏限制,与上⾯介绍的窗体⼤⼩有所不同。
函数SetFixedSize如下:void QWidget::setFixedSize(const QSize &s);设置控件的最⼤和最⼩尺⼨为s,防⽌控件⼤⼩的变化。
3.更改窗体图标⾸先在项⽬右键-->添加新⽂件,弹出如下对话框在左侧选中Qt,右侧选择Qt Resource File,然后Choose,页⾯如下:如果路径没错的话就⾃⼰命⼀个名字例如:icon,然后下⼀步,⼀路next知道完成。
qwidget setlayout的用法
qwidget setlayout的用法QWidget setLayout的用法•setLayout()是Qt中QWidget类的一个成员函数,用于设置一个布局管理器(layout)对象在当前的QWidget对象中进行布局管理。
•QWidget是Qt中所有UI组件的基类,包括窗口(windows)、对话框(dialogs)、按钮(buttons)等,可以通过setLayout来设置这些组件的布局。
1. 介绍setLayout的参数类型在用setLayout函数之前,我们需要先了解setLayout所接收的参数类型。
setLayout的参数是一个指向QLayout类的指针,即一个布局管理器对象的指针。
布局管理器是一种能够自动排列和调整大小的容器,它用于将多个UI组件组织在一起,并根据一定的规则进行自动布局。
Qt提供了多种布局管理器,包括水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)等。
2. 使用setLayout设置布局管理器我们来看一个示例代码,演示如何使用setLayout函数来设置一个垂直布局管理器。
#include <QtWidgets>int main(int argc, char *argv[]){QApplication a(argc, argv);QWidget *widget = new QWidget();QVBoxLayout *layout = new QVBoxLayout();QLabel *label1 = new QLabel("Label 1");QLabel *label2 = new QLabel("Label 2");layout->addWidget(label1);layout->addWidget(label2);widget->setLayout(layout);widget->show();return ();}在上述代码中,我们首先创建了一个QWidget对象,然后创建了一个QVBoxLayout对象作为布局管理器。
Qt子窗口(自定义qdialog,qwidget)嵌入到父窗口,子窗口跟随父窗口
Qt⼦窗⼝(⾃定义qdialog,qwidget)嵌⼊到⽗窗⼝,⼦窗⼝跟随⽗窗⼝当我们⾃⼰定义了⼀个类继承⾃QWdiget,并在其中实现了⼀些⾃定义的功能(⽐如QLabel移动到指定坐标)例如class Demonstration_Widget : public QWidget想要把这个窗⼝嵌⼊到主窗⼝中,与其他窗⼝⼀起在主窗⼝中构成主界⾯只需要在这个⼦窗⼝的构造函数中添加:1 setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);2 hide();⽽在主GUI窗⼝的类中添加⼦窗⼝的头⽂件,例如:1 #include <QMainWindow>2 #include "demonstration_widget.h"34namespace Ui {5class MainWindow;6 }78class MainWindow : public QMainWindow9 {10 Q_OBJECT1112public:13explicit MainWindow(QWidget *parent = 0);14 ~MainWindow();1516private:17 Ui::MainWindow *ui;1819 Demonstration_Widget *w_demonstration;20 };接着在主界⾯对应类的构造函数中,创建⼦窗⼝对象,设置⼦窗⼝显⽰位置并使其显⽰即可。
例如:1 MainWindow::MainWindow(QWidget *parent) :2 QMainWindow(parent),3 ui(new Ui::MainWindow)4 {5 ui->setupUi(this);6 w_demonstration = new Demonstration_Widget(this);7 w_demonstration->move(250,250);8 w_demonstration->show();910 }最后中main.cpp中显⽰主界⾯,可以看到⼦窗⼝嵌⼊到了主界⾯的相应位置1 #include <QApplication>2 #include "mainwindow.h"34int main(int argc, char *argv[])5 {6 QApplication a(argc, argv);78 MainWindow mainw;9 mainw.show();1011return a.exec();12 }。
Qt自定义QTabWidget
Qt⾃定义QTabWidget思路:QTabWidget的特点:点击不同的选项卡显⽰不同的窗⼝。
可以将QTabWidget分成两部分: (1).选项卡:点击时要知道点击的是哪个选项。
则需要将选项卡和窗⼝的信息存起来,点击时去这个信息中判断; (2).窗⼝:点击某个选项卡时,相应的窗⼝显⽰,其他窗⼝隐藏,可以将这些窗⼝全部放到⼀个布局中。
(1)创建⼀个结构体,包含选项卡和窗⼝的信息:struct TabWidgetItem { QString id; //每项的id QWidget* window; //窗⼝ IconButton* icon; //选项卡 int status; //0选中; 1选中};QList<TabWidgetItem*> m_pTabWidgetList; //存放整个TabWidget(选项卡和窗⼝所有信息)信息的list列表(2)初始化布局和结构体void TabWidget::initLayout(){ QHBoxLayout* pMainLayout = new QHBoxLayout(this); pMainLayout->setMargin(1); pMainLayout->setSpacing(10); QVBoxLayout* pIconLayout = new QVBoxLayout(); QVBoxLayout* pWindowLayout = new QVBoxLayout(); pMainLayout->addLayout(pWindowLayout); pMainLayout->addLayout(pIconLayout);}void TabWidget::initTabWidgetItemData(){ { TabWidgetItem* pItem = new TabWidgetItem; pItem->id = "real"; QWidget* pBaseWidget = new QWidget(this); pItem->window = pBaseWidget; pItem->window->setVisible(false); pWindowLayout->addWidget(pItem->window);pItem->icon = new IconButton("实时视频", this);pIconLayout->addWidget(pItem->icon);connect(pItem->icon, SIGNAL(clicked(IconButton*)), this, SLOT(sltMenuClicked(IconButton*)));pItem->status = false;m_pTabWidgetList.append(pItem); } { TabWidgetItem* pItem = new TabWidgetItem; pItem->id = "local"; QWidget* pBaseWidget = new QWidget(this); pItem->window = pBaseWidget; pItem->window->setVisible(false); pWindowLayout->addWidget(pItem->window);pItem->icon = new IconButton("本地回放", this);pIconLayout->addWidget(pItem->icon);connect(pItem->icon, SIGNAL(clicked(IconButton*)), this, SLOT(sltMenuClicked(IconButton*)));pItem->status = false;m_pTabWidgetList.append(pItem); }}(3)⾃定义选项卡IconButton类IconButton.h⽂件#pragma once#include <QWidget>class IconButton: public QWidget{Q_OBJECTpublic:explicit IconButton(QString title, QWidget *parent = 0);~IconButton();private:QLabel* m_pTitle;private:void initLayout();public:void setTitle(QString title);protected:void mouseReleaseEvent(QMouseEvent *event);signals:void clicked();signals:void clicked(IconButton*);}IconButton.cpp⽂件#include "IconButton.h"IconButton::IconButton(QString title, QWidget *parent): QWidget(parent){initLayout();setTitle(title);}void IconButton::initLayout(){m_pMainLayout = new QHBoxLayout(this);m_pTitle = new QLabel(this);m_pTitle->setStyleSheet("QLabel{font-size:15px;font-weight:100;color:white;}"); m_pMainLayout->addWidget(m_pTitle, 0, Qt::AlignLeft);}void IconButton::setTitle(QString title){m_pTitle->setText(title);}void IconButton::mouseReleaseEvent(QMouseEvent *event){if (Qt::LeftButton == event->button()){/*只处理⿏标在按钮区域弹起 */if (this->rect().contains(event->pos())){/*单击*/emit clicked();emit clicked(this); //关键:单击返回this指针}}}(4)设置切换函数void TabWidget::setTabWidgetActivePage(QString id){QWidget* pNextwindow = NULL;for (int i = 0; i < m_pTabWidgetList.size(); i++) { //先将所有窗⼝隐藏TabWidgetItem* item = m_pTabWidgetList.at(i);item->status = 0;item->icon->setChekced(false);item->window->hide();if (item->id == id) {item->status = 1;item->icon->setChekced(true);pNextwindow = item->window;}}if (pNextwindow) {pNextwindow->show(); //再显⽰选择的窗⼝}}void TabWidget::sltMenuClicked(IconButton * btn){for (int i = 0; i < m_pTabWidgetList.size(); i++) {TabWidgetItem* item = m_pTabWidgetList.at(i);if (item->icon == btn) {setTabWidgetActivePage(item->id);break;}}}TabWidget::TabWidget(QWidget *parent){initTabWidgetData();setTabWidgetActivePage("real");}(5)⼤功告成我只是把核⼼代码写下来了,别的花⾥胡哨的添加⾃⼰写...。
QT之QTableWidget实现单元格添加按钮和进度条多次利用信号槽
QT之QTableWidget实现单元格添加按钮和进度条多次利用信号槽QTableWidget是一个用于显示表格数据的Qt小部件。
如果想在单元格中添加按钮和进度条,可以通过自定义单元格小部件来实现。
首先,我们需要创建一个自定义的单元格小部件,继承自QWidget。
在该小部件中添加一个按钮和一个进度条,并实现对应的信号槽函数。
```cppclass CellWidget : public QWidgetQ_OBJECTpublic:explicit CellWidget(QWidget *parent = nullptr) :QWidget(parent)//创建按钮和进度条m_button = new QPushButton("按钮", this);m_progressBar = new QProgressBar(this);//设置布局QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(m_button);layout->addWidget(m_progressBar);setLayout(layout);//连接按钮的点击信号和槽函数connect(m_button, &QPushButton::clicked, this, &CellWidget::onButtonClicked);}void setValue(int value)m_progressBar->setValue(value);}signals:void buttonClicked(;private slots:void onButtonClickedemit buttonClicked(;}private:QPushButton *m_button;QProgressBar *m_progressBar;};```接下来,我们需要在QTableWidget的特定单元格中使用该自定义单元格小部件。
Qt自定义窗口部件的创建
Qt自定义窗口部件的创建通过对一个已经存在的Qt窗口部件进行子类化或者直接对QWidget进行子类化,就可以创建自定义窗口部件。
以下直接对已有的Qt窗口部件进行子类化:如下通过对QLineEdit进行子类化来实现自已需要的窗口部件,参考代码如下:/**********************子类化的头文件*****************************/#ifndefLINEEDIT_H#defineLINEEDIT_H#include#includeclassLineEdit:publicQLineEdit{Q_OBJECTpublic:explicitLineEdit(QObject*parent=0);protected:voidmouseDoubleClickEvent(QMouseEvent*);};#endif//LINEEDIT_H/**********************子类化的源文件*****************************/#include"lineedit.h"#includeLineEdit::LineEdit(QObject*parent){}//重新实现QLineEdit类的mouseDoubleClickEvent(QMouseEvent*event)//事件处理函数,从而达到双击LineEdit的时候会有一个消息框弹出voidLineEdit::mouseDoubleClickEvent(QMouseEvent*event){QMessageBox::information(this,tr("提示"),tr("你是对的!"));event->ignore();}以上是我自己实现的自己的一个LineEdit类,我双击这个LineEdit控件,就会弹出个消息框出来。
首先建一个工程,把上面的两个文件放到工程目录下面,然后来实现自己的代码:/**********************主窗口的头文件*****************************/#ifndefMYWIDGET_H#defineMYWIDGET_H#include#include"lineedit.h"classMyWidget:publicQWidget{Q_OBJECTpublic:explicitMyWidget(QWidget*parent=0);private:LineEdit*lineedit;};#endif//MYWIDGET_H/**********************主窗口的源文件*****************************/#include"mywidget.h"#includeMyWidget::MyWidget(QWidget*parent):QWidget(parent){lineedit=newLineEdit;QHBoxLayout*hlayout=newQHBoxLayout;hlayout->addWidget(lineedit);setLayout(hlayout);}/**********************显示主窗口的源文件*****************************/#include#include#include"mywidget.h"intmain(intargc,char*argv[]){QApplicaTIonapp(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));MyWidget*mywidget=newMyWidget;mywidget->show();returnapp.exec();}以下是运行后的一个效果:说明:以上只是个测试程序,没有实际应用价值,具体的应用还在于实际工作中的需求。
QT实现不规则透明窗体
QT实现不规则透明窗体方法一:setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框//设置背景QPixmap pixmap("C:\\1.gif");QPixmap pixmap1=pixmap.scaled(400,700);QPalette palette=this->palette();palette.setBrush(backgroundRole(),QBrush(pixmap));setPalette(palette);setMask(pixmap1.mask());//setAttribute(Qt::WA_TranslucentBackground);//设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体QBitmap bitmap("C:\\2.png");setMask(bitmap);[QT编程]QT实现不规则窗体和透明窗体不规则窗体的实现有两种方式:一种是设置窗体的掩码图像;另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。
第一种方式:首先要准备两张图像,一张是要显示的图像,另一张是第一张图的掩码图像,黑色部分是你的窗体要显示的部分,如图:具体实现的关键代码如下:运行效果不是特别完美,应该是我的掩码图像的问题,如图:这种方式有一个问题,就是当你的图像特别不规则的时候,会有很明显的锯齿出现。
之前做过一个卡通图像就出现这个问题,解决的办法是使用下面的第二种方法。
第二种方式:只需要准备一张图片,透明部分将不会显示,支持半透明。
我这里弄了一张背景透明,前景半透明的图像,如图:具体实现的关键代码如下:效果截图:说到这里,我们的不规则透明窗体虽然创建出来了,但是现在我们无法移动它了,现在我们就来实现左键拖动窗体的功能,首先要先声明两个变量,另外要重写三个事件,代码如下:关键的实现代码(press变量在构造函数中初始化为false):这样就实现不规则窗体的移动功能了。
QT入门-在窗体中添加按钮以及对窗体进行设置
QT⼊门-在窗体中添加按钮以及对窗体进⾏设置1) QT中,按钮类叫做QPushButton。
在mywidget.h的MyWidget类的私有变量中:QPushButton b1; 或者QPushButton* b2;按住F4可以直接跳到.cpp⽂件。
2)按钮初始化:在窗⼝类的构造函数⾥初始化即可。
b2=new QPushButton(…)选中按F1可以查看构造函数以及其参数。
(const QIcon &icon, const QString &text, QWidget *parent = nullptr)//图标以及……(const QString &text, QWidget *parent = nullptr)//按钮上显⽰的内容以及…(QWidget *parent = nullptr)//⽗窗⼝⾄于修改内容的函数,需要从⽗类(QAbstractButton)⾥找。
即void setText(const QString& text);因此找不到相应的成员函数实现其功能的时候,可以从⽗类⾥找⼀下。
b2->setText(“Hello QT”);b2=new QPushButton(“Hello QT”);b2->show();想要的效果是把按钮显⽰到窗⼝⾥(按钮实际上也是窗⼝?),但这时候按钮是独⽴显⽰出来的。
如果窗⼝需要依附于另⼀个窗⼝,就应该给该窗⼝指定⽗类,这可以在构造函数内实现。
因为此处实例化按钮是在MyWidget构造函数内实现的,所以⽗类指针是this,即b2=new QPushButton(“Hello QT”,this);或者:QPushButton b1; b1.setParent(this);注意,如果指定了⽗亲的话,就不⽤调⽤show函数了,因为直接在⽗类窗⼝显⽰了。
3)两个按钮默认在同⼀个位置的话会发⽣覆盖,需要改变按钮的位置,相当于移动。
Qt设置widget控件样式(基本属性、背景)
this->setAutoFillBackground(true);//属性控制小部件背景是否自动填充
隐藏标题栏:
如果界面需要隐藏标题栏,必须在设置完全局控件样式之后添加隐藏标题栏代码。
请求出错错误代码400请尝试刷新页面重试
Qt设置 widget控件样式(基本属性、背景)
注:本博客为转载,本博客意在学习记录。
样式:
1、使用QPalette 添加样式,最后赋值为widget小控件或者整体控件(this指针)。
QPalette palette = this->palette(); palette.setColor(QPalette::Base,QColor(0,255,255)); palette.setColor(QPalette::Window,QColor(0,0,0)); this->setPalette(palette);
this->setWindowFlags(Qt::FramelessWindowHint | QtsOnTopHint);
Qt自定义控件
Qt⾃定义控件参考:https:///georgeOfChina/p/7773141.html1、打开QtCreator,这⾥使⽤的是Qt5.10.1+MSVC2015_32位的环境。
新建项⽬,其他项⽬->Qt4设计师⾃定义控件->设置类名Test【⼤写开头】,确定,此时⽆ui⽂件2、删除Test.h和Test.cpp,右键⼯程添加Qt->Qt设计师界⾯类,选择Widget模板,改名字为Test,此时就有ui⽂件了3、代码初始化在Test.h中添加头⽂件#include <QtUiPlugin/QDesignerExportWidget>在类名前⾯加上QDESIGNER_WIDGET_EXPORT宏4、打开ui⽂件,设计想要的界⾯这⾥拖⼊3个checkbox,功能是1勾选上2,3也勾选,1不勾选2,3也不勾选5、代码实现进⼊第⼀个checkbox的clik回调void Test::on_checkBox_clicked(){if(ui->checkBox->isChecked()){ui->checkBox_2->setChecked(true);ui->checkBox_3->setChecked(true);}else{ui->checkBox_2->setChecked(false);ui->checkBox_3->setChecked(false);}}6、编译,在对应的⽂件夹⽣成testplugin.dll和testplugin.lib7、得到最后的⽂件testplugin.dll、testplugin.lib、test.h如何使⽤呢?1、把testplugin.dll放在Qt库路径和Creator路径下D:\Qt5.10.1\5.10.1\msvc2015\plugins\designerD:\Qt5.10.1\Tools\QtCreator\bin\plugins\designer2、使⽤对应版本Creator新建⼯程,可以看见ui中有了Test控件3、把这个控件拖到界⾯就ok了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void QWidget::setMask ( const QBitmap & bitmap )
Causes only the pixels of the widget for which bitmap has a corresponding 1 bit to be visible. If the region includes pixels outside the rect() of the widget, window system controls in that area may or may not be visible, depending on the platform.
只有在bitmap中像素数据是1的地方才会显示出widget的相应像素来. Bitmap就是像素数据只有两个值: 0和1 (1 bit-depth, monochrome).
QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
Causes only the parts of the widget which overlap region to be visible.
只有widget与region重叠地方才会显示出来. 自己构造一个QRegion就行了.
void ShapedClock::resizeEvent(QResizeEvent * /* event */) {
int side = qMin(width(), height());
QRegion maskedRegion(width() / 2 - side / 2, height() / 2 - side / 2, side,
side, QRegion::Ellipse);
关键是使用
void QWidget::setMask ( const QBitmap & bitmap )
void QWidget::setMask ( const QRegion & region )
void QWidget::setMask ( const QRegion & region )
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask()); // 可以不使用转换的, 使用一张专门的bitmap图片.上面的这些方式用一普通的QWidget就可以了. 当然, 对于窗口而言, 很多时候我们要把它的标题栏去掉:widget->setWindowFlags(Qt::FramelessWindowHint);但是对于不规则的QPushButton就有些特殊, 要使用QIcon来处理:button->setIcon(QIcon("xxx.png"));button->setIconSize(w, h);button->setMask(maskBitmap/*maskedRegion*/);button->setFixedSize(w, h); // 这个当然最好使用它的icon的大小.