编制了一个程序,需要用到QTableWidget和
QPainter,遇到以下
问题:
1. 若只有QTableWidget或者QPainter都能正常工作,但是如果把两个都加上,则只显示QTableWidget,不能显示QPainter。
将mainwindow.cpp中的vlayout->addWidget(table);注释掉,则正确
显示图形,如下图:
window.open('http://www.qtcn.org/bbs/attachment/Mon_1111/17_108454_705c52fb902b9a0.png?4');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >将mainwindow.cpp中的vlayout->addWidget(table); 注释打开,则只能显示table,不能显示painter,如下图:
2. 请教如何做到既显示QTableWidget又能正确显示QPainter,谢谢!
----------------------------------------main.cpp---------------------------------------
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow *mainwindow=new MainWindow;
mainwindow->show();
return a.exec();
}
----------------------------------------mainwindow.h---------------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui>
class QPushButton;
class QTableWidget;
class
QLabel;
class QLineEdit;
class RenderArea;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
private:
QLabel *nvlabel,*nlooplabel;
QLineEdit *nvlineedit,*nlooplineedit;
QTableWidget *table,*abc_table;
QPushButton *fitButton,*closeButton,*okButton,*paint_Button;
QHBoxLayout *tophlayout,*hlo;
QVBoxLayout *vlayout;
QWidget *window;
RenderArea *renderArea;
private:
void initWidgets();
private slots:
void create_table();
};
#endif // MAINWINDOW_H
----------------------------------------mainwindow.cpp---------------------------------------
#include "mainwindow.h"
#include "render.h"
#include <QtGui>
MainWindow::MainWindow()
{
initWidgets();
}
MainWindow::~MainWindow()
{
}
void MainWindow::initWidgets()
{
//表格
table=new QTableWidget;
//按钮
QString a1=tr("回归ABC");
fitButton= new QPushButton(a1);
QString a2=tr("关闭程序");
closeButton=new QPushButton(a2);
QString a3=tr("确定参数");
okButton=new QPushButton(a3);
//label
QString a4=tr("拉速个数");
nvlabel=new QLabel(a4);
QString a5=tr("回路个数");
nlooplabel=new QLabel(a5); //上方,水平layout
tophlayout = new QHBoxLayout;
tophlayout->addWidget(nvlabel);
tophlayout->addWidget(nvlineedit);
tophlayout->addWidget(nlooplabel);
tophlayout->addWidget(nlooplineedit);
tophlayout->addWidget(okButton);
tophlayout->addStretch();
renderArea = new RenderArea;
//整体layout
vlayout = new QVBoxLayout;
vlayout->addLayout(tophlayout);
vlayout->addWidget(table);
vlayout->addWidget(renderArea);
window = new QWidget;
window->setLayout(vlayout);
setWindowTitle(tr("fit ABC"));
setCentralWidget(window);
showMaximized();
}
void MainWindow::create_table()
{
nv=nvlineedit->text().toInt();
}
---------------------------------------------------------render.h---------------------------------------------------
#ifndef RENDERAREA_H
#define RENDERAREA_H
#include <QWidget>
class RenderArea : public QWidget
{
Q_OBJECT
public:
RenderArea(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
};
#endif
---------------------------------------------------------render.cpp---------------------------------------------------
#include <QtGui>
#include "render.h"
RenderArea::RenderArea(QWidget *parent)
: QWidget(parent)
{
setBackgroundRole(QPalette::Base);
setAutoFillBackground(true);
}
void RenderArea::paintEvent(QPaintEvent * /* event */)
{
static const QPoint points[4] = {
QPoint(10, 80),
QPoint(20, 10),
QPoint(80, 30),
QPoint(90, 70)
};
}