动态的改变窗口的大小

ningto.com 2010-10-26 02:12:31
怎样鼠标左键在QDialog上点击一下QDialog的宽度就增加一个1,高度不变?
谢谢了!
...全文
426 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
麻酱面条 2010-10-27
  • 打赏
  • 举报
回复
字符没有显示可能是outStr根本就没有变化,你用断点跟踪一下outStr。
也许你只是把宽度增加了,可是每次输入的字符并没有取到。
ningto.com 2010-10-27
  • 打赏
  • 举报
回复
outStr没问题阿, 上面有源程序麻烦看一下,并不是所有输入的字符都不能显示, 只是拉伸的那部分不能显示,原始大小的那部分还是可以显示的。
ningto.com 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sirit 的回复:]

看不到图,解决了吗?
[/Quote]
没解决,图显示不了, 准备另外再开个贴。
麻酱面条 2010-10-27
  • 打赏
  • 举报
回复
看不到图,解决了吗?
ningto.com 2010-10-27
  • 打赏
  • 举报
回复

file:///home/tjw/desk/Screenshot.png
ningto.com 2010-10-27
  • 打赏
  • 举报
回复
ningto.com 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sirit 的回复:]

字符没有显示可能是outStr根本就没有变化,你用断点跟踪一下outStr。
也许你只是把宽度增加了,可是每次输入的字符并没有取到。
[/Quote]
我检查了一下outStr取到了,没问题,就是那个字符参被遮住了,看下图:
lefttime 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tujiaw 的回复:]

楼上辛苦了,确实这里有问题,可这样改还是和以前一样,照样显示不出来...
[/Quote]
LZ确认下, outStr是否正确?
ningto.com 2010-10-26
  • 打赏
  • 举报
回复
楼上辛苦了,确实这里有问题,可这样改还是和以前一样,照样显示不出来...
lefttime 2010-10-26
  • 打赏
  • 举报
回复
void DrawDlg::paintEvent(QPaintEvent *)
{
painter = new QPainter(this);

QRect rect(10, 6, 1000, 50);

painter->drawText(rect, Qt::AlignLeft, outStr);
}

rect设置有问题, 修改成:
void DrawDlg::paintEvent(QPaintEvent* event)
{
painter = new QPainter(this);

QFontMetrics metrics(font());
QRect rect = metrics.boundingRect(outStr);

QRect textRect(10, 6, rect.width(), rect.height());

painter->drawText(textRect, Qt::AlignLeft, outStr);
}

ningto.com 2010-10-26
  • 打赏
  • 举报
回复
按上面的做每次用键盘输入字符时可以实现对话框宽度的增加,但是又有个问题,宽度增加了但是在字符输入到第18个的时候就显示不出来了,代码如下,求高人指点:

draw.h/////////////////
#ifndef DRAW_H
#define DRAW_H

#include <QtGui>

class DrawDlg : public QDialog
{
public:
DrawDlg(QWidget *parent = 0);

void paintEvent(QPaintEvent *);
void keyPressEvent(QKeyEvent *);
void resizeEvent(QResizeEvent *);

private:
QPainter *painter;
QString outStr;

int count;
int width;

QSize oldsize;
};

#endif



draw.cpp/////////////////
#include <QtGui>
#include "draw.h"

DrawDlg::DrawDlg(QWidget *parent)
:QDialog(parent)
{
this->resize(150, 50);
count = 0;
}

void DrawDlg::paintEvent(QPaintEvent *)
{
painter = new QPainter(this);

QRect rect(10, 6, 1000, 50);

painter->drawText(rect, Qt::AlignLeft, outStr);
}

void DrawDlg::keyPressEvent(QKeyEvent *e)
{
count = outStr.count();

if (e->key() == Qt::Key_Backspace)
{
outStr.remove(count-1, count-1);
oldsize.rwidth() -= 5;
width = oldsize.rwidth();

this->resize(width, 50);
update();

if (count == 1)
{
outStr.clear();
close();
}
return;
}

if (count >= 10)
{
oldsize.rwidth() += 10;
width = oldsize.rwidth();
this->resize(width, 50);
}

outStr += e->text();

update();
}

void DrawDlg::resizeEvent(QResizeEvent *)
{
oldsize = this->size();
}
lefttime 2010-10-26
  • 打赏
  • 举报
回复
重新实现在窗体事件mousePressEvent, 在事件响应中改变宽度:
void XXXXX::mousePressEvent(QMouseEvent* event)
{
......
resize(width()+1, height());
......
}
dbzhang800 2010-10-26
  • 打赏
  • 举报
回复
1. 鼠标事件mousePressEvent
2. setGeometry 或 resize 函数

具体看 QWidget 的manual

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧