gpt4 book ai didi

c++ - 单击按钮时在 QFrame 中绘制。

转载 作者:太空狗 更新时间:2023-10-29 19:41:08 27 4
gpt4 key购买 nike

假设有一个名为“Draw”的 QPushButton、一个 QLineEdit 和一个 QFrame。单击按钮时,我想从 QLineEdit 中获取一个数字并在 QFrame 中绘制一个圆圈。我怎样才能做到这一点?请向我提供代码。

附言问题是 QPainter 的 draw 方法应该在 drawEvent 方法中调用。

最佳答案

如果@Kaleb Pederson's answer对您来说还不够,那么这里有一个完整的解决方案,可以根据您的描述进行简单设置。在 Linux 上使用 Qt 4.5.2 进行测试。我有一些空闲时间...;)

主要.cpp:

#include <QApplication>
#include "window.h"

int main( int argc, char** argv )
{
QApplication qapp( argc, argv );

Window w;
w.show();

return qapp.exec();
}

窗口.h

#pragma once

class QLineEdit;
class QPushButton;
#include <QWidget>

class Frame;

class Window : public QWidget
{
Q_OBJECT

public:
Window();

private slots:
void onButtonClicked();

private:
QLineEdit* m_lineEdit;
QPushButton* m_pushButton;
Frame* m_frame;
};

窗口.cpp:

#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>

#include "frame.h"
#include "window.h"

Window::Window()
: m_lineEdit ( new QLineEdit( this ) )
, m_pushButton( new QPushButton( tr( "Draw" ), this ) )
, m_frame ( new Frame( this ) )
{
connect( m_pushButton, SIGNAL( clicked() )
, SLOT( onButtonClicked() ) );

QHBoxLayout*const hLayout = new QHBoxLayout;
hLayout->addWidget( m_lineEdit );
hLayout->addWidget( m_pushButton );

QVBoxLayout*const vLayout = new QVBoxLayout( this );
vLayout->addLayout( hLayout );
m_frame->setFixedSize( 300, 400 );
vLayout->addWidget( m_frame );

setLayout( vLayout );
}

void Window::onButtonClicked()
{
const int r = m_lineEdit->text().toInt(); // r == 0 if invalid
m_frame->setCircleRadius( r );
m_frame->update();
}

框架.h:

#pragma once

#include <QFrame>

class Frame : public QFrame
{
Q_OBJECT

public:
Frame( QWidget* );

void setCircleRadius( int );

protected:
void paintEvent( QPaintEvent* );

private:
int m_radius;
};

框架.cpp:

#include <QPainter>

#include "frame.h"

Frame::Frame( QWidget* parent )
: QFrame( parent )
, m_radius( 0 )
{
setFrameStyle( QFrame::Box );
}

void Frame::setCircleRadius( int radius )
{
m_radius = radius;
}

void Frame::paintEvent( QPaintEvent* pe )
{
QFrame::paintEvent( pe );

if ( m_radius > 0 )
{
QPainter p( this );
p.drawEllipse( rect().center(), m_radius, m_radius );
}
}

关于c++ - 单击按钮时在 QFrame 中绘制。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3309708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com