怎么实现QLabel或者QLineEdit得到焦点时背景色闪烁

怎么实现QLabel或者QLineEdit得到焦点时背景色闪烁,第1张

------解决思路----------------------引用:题:通键盘改变焦点同QLineEdit获取焦点控件改变颜色失焦点变原颜色我用eventFilter事件滤没效其办 设置式:QLineEdit{border:1px solid gray;}QLineEdit:hover{border-width:2px;border-color:rgb(170, 170, 255);}QLineEdit:focus {border-width:2px;border-color:rgb(170, 170, 255);}注意:QLineEdit:focus获取焦点式

qwidget缩放后获取正确的鼠标位置步骤如下:

1、首先鼠标获取全局坐标;

2、然后通过QLabel封装的mapFromGlobal函数进行转换,即可获取的坐标在QLabel中的位置。

qt产生随机数

可以使用c语言中的rand(),qt封装了一个线程安全的qrand()函数,与rand()用法一致。同样,qsrand()与srand()用法一致。

在QLabel中显示

直接调用QLabel::setText()函数即可。

int tid = starttimer(1000);

然后timeevent里

switch(t->timerid()){

case tid:

。。。

}

会调用scrollarea窗口显示,窗口大小能根据大小自动调整,但是最大为1024768,过大就要有滚动条来显示

mainwindow中点击“显示”调用scrollarea窗口,下面的函数是被一个按钮的槽函数调用的

void MainWindow::Show_Image_byname(char filename)

{

if(!filename || !strlen(filename))

{

return;

}

char buf[128]= {0};

strcpy(buf,SAVE_IMAGE);

strcat(buf,filename);

ScrollArea new_image = new ScrollArea();

new_image->set_image(buf);

new_image->setBackgroundRole(QPalette::Dark);

new_image->show();

return;

}

添加文件scrollareaui文件,画出一个scrollarea

在生成的scrollareah中添加私有成员QLabel

private:

Ui::ScrollArea ui;

QLabel label;

在析构函数中添加内存释放

ScrollArea::~ScrollArea()

{

delete ui;

if(label)

{

delete label;

}

}

在生成的scrollareacpp中添加显示实现函数

void ScrollArea::set_image(char filename)

{

QImage ppm = new QImage(filename);

label = new QLabel();

printf("ppm->width()=%d, ppm->height()=%d\n",ppm->width(), ppm->height()); //获取的宽度和高度

label->setPixmap(QPixmap::fromImage(ppm));

this->setWidget(label);

/设置窗口最大高度和宽度为1024768/

this->setMaximumHeight(768);

this->setMaximumWidth(1024);

this->resize(QSize( ppm->width()+5, ppm->height() +5));

return;

}

因为setText()不会立即调用paintEvent进行绘图。程序会等你退出循环后才有机会进行绘图。所以你看到的是最后一次读回来的值。

解决的办法是:

label->setText()后,调用label->repaint()立即重绘。

或者

既然你在循环里每次都要sleep(1),为什么不加一个Timer,然后在Timer超时的时候去做这些事?这比在for循环里sleep要好很多。因为在for循环里sleep,程序一直block在你这个for循环里出不来,响应不了其他事件。不太好。

// ----- 答案肯定是可以的 -----//

// 先创建原先的界面,用布局进行管理

QWidget widgetMain = new QWidget();

// 加入一个输入框和按钮

QLineEdit lineEdit = new QLineEdit(widgetMain);

QPushButton btn = new QPushButton(widgetMain);

// 用水平布局将这2个控件框起,并且置于界面顶部

QHBoxLayout horLayout = new QHBoxLayout();

horLayout->addWidget(lineEdit, 4);

horLayout->addWidget(btn, 1);        // 设置布局比例为4:1

// 然后添加一个全局布局控件

QVBoxLayout verLayout = new QVBoxLayout(widgetMain);

verLayout->addLayout(horLayout);// 加入刚才的输入组,底部添加d簧

verLayout->addStretch();

// --------- 基本界面创建完成 -------------- //

// 关联处理动态创建

int nCnt = lineEdit->text()toInt(); // 输入的个数

for (int i = 0; i < nCnt; i++) {

    QLabel label = new QLabel(widgetMain);

    // 插入之前的布局

    label->setText(QString("动态创建label %1)arg(i + 1));

    verLayout->insertWidget(1 + i, label);

}

// 大功告成

// 备注,以上代码纯手工,写法或其他错误请自行修改,仅作参考

以上就是关于怎么实现QLabel或者QLineEdit得到焦点时背景色闪烁全部的内容,包括:怎么实现QLabel或者QLineEdit得到焦点时背景色闪烁、qwidget缩放后获取正确的鼠标位置、关于qt随机值传递给label问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9526929.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存