要求:
- 在界面上绘制两条垂直交叉直线,一条连接窗口上下边框的中点,一条连接窗口左右边框的中点,当窗口缩放时,直线相对位置不变。
- 将窗口背景绘制为蓝色。
代码如下:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//绘图事件
void paintEvent(QPaintEvent *);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QColor color = QColor(0,150,255);
QPalette p = this->palette();
p.setColor(QPalette::Window,color);
this->setPalette(p);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
//实例化画家对象, this指定绘图的设备
QPainter painter(this);
//画线
QPen pen(QColor(0,0,0));
pen.setWidth(3);
painter.setPen(pen);
//设置抗锯齿能力
painter.setRenderHint(QPainter::Antialiasing);
painter.drawLine(QPoint(0,height()/2),QPoint(width(),height()/2));
painter.drawLine(QPoint(width()/2,0),QPoint(width()/2,height()));
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setWindowTitle("任务1");
w.show();
return a.exec();
}
注意点:
1、当设置背景颜色的时候,有多种方法,在这个项目里,我选择了在构造函数中直接设置背景颜色
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QColor color = QColor(0,150,255);
QPalette p = this->palette();
p.setColor(QPalette::Window,color);
this->setPalette(p);
}
实际上还有一种方法
this->setStyleSheet ("background-color: rgb(0, 150, 255);");
但是这一方法,会导致画的两条线看不见…有没有大佬能告诉我为什么
2、画线:
void MainWindow::paintEvent(QPaintEvent *)
{
//实例化画家对象, this指定绘图的设备
QPainter painter(this);
//画线
QPen pen(QColor(0,0,0));
pen.setWidth(3);
painter.setPen(pen);
//设置抗锯齿能力
painter.setRenderHint(QPainter::Antialiasing);
painter.drawLine(QPoint(0,height()/2),QPoint(width(),height()/2));
painter.drawLine(QPoint(width()/2,0),QPoint(width()/2,height()));
}
height()获取的是窗口的高
width()获取的是窗口的宽
这样下来,当窗口缩放时,直线相对位置不变。
QPen pen(QColor(0,0,0));
pen.setWidth(3);
painter.setPen(pen);
这个是设置了笔的性质,为了更加美观
3、生成可执行文件
选择release,然后一定要进行编译!!!
在这里找到生成的exe文件
将其复制,并且新建一个文件夹,将此.exe文件粘贴到里面
打开QT控制台
cd /d 路径(指的是需要打包的exe程序目录,就是刚才拷贝出来的exe程序所在的目录),回车后:
输入如下命令行:windeployqt 程序名 敲击回车。这一步操作是将所需的库文件全都拷贝到exe程序的当前文件:
如上图所示
点击,运行
颜色比较深,在构造函数那边也可以继续调颜色