QT 中直接修改方式修改一个widget对象中定义的共有成员变量无法修改,求解答
    本人是刚刚接触Qt不久的小菜鸡,弄了一个简单地操作数据库的程序,其中登录需要根据不同角色显示不同的窗口,并把登录账号作为参数传递到子窗口(因为后面我打算设计一个修改密码的功能),我的思路是:创建两个Qt设计师界面类的对象:Login和Customer,Login作登录窗口,其中定义客户窗口Customer c;而在Customer中我定义一个int型的公有成员变量ID,用来存储当前登录的用户ID(就是登录账号);登录窗口的登录按钮的槽函数会根据选择的角色以及输入的账号和密码是否正确来选择显示相应的操作界面(在这里我仅仅做了客户的),然后将成功登录时使用的ID,直接赋值给c.ID,然后关闭登录界面。
    但是在我的试验中,我想把这个值显示在一个标签中,却在c窗口中显示是一个随机数,而我直接用c.ID=500,得到的结果依然是标签中显示的还是一个随机数,这也就意味着**我直接给公有成员变量赋值的语句根本没有起作用**,这是为什么,我又该怎么解决这个问题。我的数据库链接是成功的,而且登录功能已经能够实现。最关键的是**这个是可以通过编译,只是运行时无法达到功能**

以下是我的部分代码(主函数和连接数据库的文件我就不发了):

 #ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include <customer.h>

namespace Ui {
class Login;
}

class Login : public QWidget
{
    Q_OBJECT

public:
    explicit Login(QWidget *parent = 0);
    ~Login();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Login *ui;
    Customer c;
};

#endif // LOGIN_H


#include "login.h"
#include "ui_login.h"
#include <QMessageBox>
#include <QSql>
#include <QSqlQuery>

Login::Login(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Login)
{
    ui->setupUi(this);
}

Login::~Login()
{
    delete ui;
}

void Login::on_pushButton_clicked()
{
    if(ui->comboBox->currentText()==tr("请选择登录角色"))
    {
        QMessageBox::critical(0,tr("登录失败"),tr("请选择正确的登录角色"),QMessageBox::Cancel);
    }


    if(ui->comboBox->currentText()==tr("超级管理员登录"))
    {
        QSqlQuery query;
        bool suc=false;
        query.exec("SELECT * FROM Administrator");
        while(query.next())
        {
            if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
            {
                QMessageBox::information(0,tr("登陆成功"),tr("超级管理员:%1 登陆成功").arg(query.value(0).toString()));
                this->close();
                suc=true;
                break;
            }
        }
        if(!suc)
            QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
    }


    if(ui->comboBox->currentText()==tr("调度管理员登录"))
    {
        QSqlQuery query;
        bool suc=false;
        query.exec("SELECT * FROM Dispatcher");
        while(query.next())
        {
            if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
            {
                QMessageBox::information(0,tr("登陆成功"),tr("调度管理员:%1 登陆成功").arg(query.value(2).toString()));
                this->close();
                suc=true;
                break;
            }
        }
        if(!suc)
            QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
    }


    if(ui->comboBox->currentText()==tr("车队管理员登录"))
    {
        QSqlQuery query;
        bool suc=false;
        query.exec("SELECT * FROM Manager");
        while(query.next())
        {
            if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
            {
                QMessageBox::information(0,tr("登陆成功"),tr("车队管理员:%1 登陆成功").arg(query.value(2).toString()));
                this->close();
                suc=true;
                break;
            }
        }
        if(!suc)
            QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
    }

[color=#FF0000]//仅试验了客户这一块,出现了问题
    if(ui->comboBox->currentText()==tr("客户登录"))
    {
        QSqlQuery query;
        bool suc=false;
        query.exec("SELECT * FROM Customers");
        while(query.next())
        {
            if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))
            {
                QMessageBox::information(0,tr("登陆成功"),tr("客户:%1 登陆成功").arg(query.value(2).toString()));
                this->close();
                //c.ID=query.value(0).toInt();   
                c.ID=10000;
                suc=true;
                break;
            }
        }
        if(suc)
           {
                c.show();
           }
        else
            QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);
    }
}
//Login.cpp


#ifndef CUSTOMER_H
#define CUSTOMER_H

#include <QWidget>

namespace Ui {
class Customer;
}

class Customer : public QWidget
{
    Q_OBJECT

public:
    int ID;
    explicit Customer(QWidget *parent = 0);
    ~Customer();

private:
    Ui::Customer *ui;
};

#endif // CUSTOMER_H


#include "customer.h"
#include "ui_customer.h"

Customer::Customer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Customer)
{
    ui->setupUi(this);
    ui->label->setText(tr("当前ID:%1").arg(ID));
}

Customer::~Customer()
{
    delete ui;
}
//Customer.cpp

多谢大神帮助,感激不尽

0

1个回答

Customer::Customer(QWidget *parent) :
QWidget(parent),
ui(new Ui::Customer)
{
ui->setupUi(this);
ui->label->setText(tr("当前ID:%1").arg(ID));
}
你在构造函数给他值,他能得到?
你应该在 c.ID=10000后; 在调用 ui->label->setText(tr("当前ID:%1").arg(ID));他就可以了

不过说实话,你c++基础需要加强了

1
CrazyKeyboardMan
数据刘 我自己解决了,定义了一个接口函数,多谢了。
2 年多之前 回复
CrazyKeyboardMan
数据刘 还有一个问题。。。。就是我这样改了之后,这里的ui指的是Login::ui,我的本意,这个ui是Customer::ui,这里我不会处理了。。。
2 年多之前 回复
CrazyKeyboardMan
数据刘 一语中的,的确需要多多练习了。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++中修改const成员变量
1.c++类中定义const成员的时候必须进行初始化,而且只能通过初始化列表来进行 所以说类中存在const成员时,必须存在构造函数。当类中同时存在拷贝构造函数时也必须通过初始化列表将其初始化,否则编译器会报错 2.c++类中提供的const成员变量为只读变量,所以说我们可以通过一定的方式改变它 那么我们可以通过什么方式来改变cons成员呢? 1.C++ 中提供了const_cast强制
对象的成员变量能否被修改
有一对象A a, 内有一成员变量m_a, 调用它的函数GetA()return m_a;rn现在要将将m_a传给一个void*的形参,&a.GetA() 这样传参是否合理,函数内如果改变了实参m_a的值会不会rn改变对象的成员变量的值
qt中修改treeview控件无法保存
如图,通过一个ui界面的按键对界面上的treeview进行修改,但是运行之后还是空白。rnrn![图片说明](https://img-ask.csdn.net/upload/201905/14/1557764148_758100.png)rnrn我在槽函数的末尾设置了一个检测用的断点,如图,结果显示在槽函数运行完成之后是可以正常修改的。但是运行结束之后却无法保存修改?rn![图片说明](https://img-ask.csdn.net/upload/201905/14/1557764377_517617.png)rnrn我怀疑是有关与相关变量的生存期的问题,但是没有什么具体的头绪.希望各位大神帮帮忙分析分析给点建议。
广播修改widget
public void modifyPower(){ // 从layout下main.xml中构造widgets if(views==null)views = new RemoteViews(getPackageName(), R.layout.main); // 这里我们应该判断currentBatteryLevel的数值来显示图片电量等级,比如battery_level_1...
QT中修改应用程序的icon
1.新建txt文档中添加以下文字,并保存为my.txtIDI_ICON1 ICON DISCARDABLE "A.ico" 2.修改将文档全名修改为:myicon.rc3.拷贝将myicon.rc及A.ico两个文件拷贝到当前工程目录下(与cpp、ui等文件相同的目录下).4.添加打开.pro文件,在代码最后一行添加:RC_FILE = myicon.rc 然后重新编译工程即可。
修改qt中的ui界面
怎么修改我下载别人QT程序的ui界面 在winsowns环境下 我想看一看我修改后的效果 可是每次都是原来的 请大家帮帮忙
android 修改launcher中默认启动的widget
修改的文件是在 launcher2/res/xml/default_workspace.xml文件 这个是在LauncherProvider.java中加载的
Linux中修改DNS的方式
Linux中修改DNS有两种方式,临时修改和永久修改,下面分别介绍。 1、临时修改网卡DNS地址 代码如下: sudo vim /etc/resolv.conf 改为如下内容: 代码如下: nameserver 8.8.8.8 #修改成你的主DNS nameserver 8.8.4.4 #修改成你的备用DNS search localhost #你的域名
const成员函数修改成员变量的问题
class CTextBlock{ public: std::size_t length() const; private: char *pText; std::size_t textLength; bool lengthIsValid; }; std::size_t CTextBlock::length()const { if (!lengthIsValid) { textLe
vs2005 修改成员变量
给控件关联了变量 想删除或修改关联 rn原来是用vc6.0的 vs2005不知道怎么改
Vue修改数组中的对象
在项目中遇到父子数组列表传值动态修改的需求,遇到了修改数组对象数据后不更新的问题 export default { data () { return { dataList: [{show:false}, // 这里要将show的值修改为false {show:false}, {...
IDC_STATIC中的ID无法修改
MFC里面新建了一个static,想动态的修改里面的Caption属性,查的是需要修改ID的,但是我修改完了以后在GetDlgItem(NewId)->SetWindowTextW(L"编译错误")的时候,NewId那里一直报错,说是未定义的标识符,我记得以前遇见过一次,当时重新做了一个dlg再刚开会新建static的时候改名就行了,但是我现在项目都快做好了,如果重新做一个DLg工作量太大了,谁有好的解决方法啊。
修改私有成员变量
[code=C/C++]rn#include rnusing namespace std;rnrnclass Foornpublic:rn Foo(int data):member(data)rn ~Foo()rn int& getRef()return member;rnprivate:rn int member;rn;rnrnvoid main()rn Foo inst(10);rn cout << "init value of member is " << inst.getRef()<
请问在全局函数中修改成员变量,为何出错?
void testFunc()rnrn CTestDlg * pDlgrn pDlg->m_test=111;rnrnrnCTestDlg是一个对话框类,对话框上面有个TextBox1,TextBox1关联到成员变量m_test testFunc()是个全局函数。程序能编译过,但是运行后就非法操作,望指点。rn
DWR中回调函数 修改成员变量或全局变量
在异步交互的方法前 加: dwr.engine.setAsync(false);
CMainFrame想修改VIEW中的成员变量如何做?
CMainFrame想修改VIEW中的成员变量如何做?
Qt中修改XML文件中的节点值
不能修改XML文件的节点rnxml文件:rnrn rn zekirn caizhiming@tom.comrn rnrnrn我写的源码:rn#include "mainwindow.h"rn#include "ui_mainwindow.h"rn#include rn#include rn#include rn#include rnMainWindow::MainWindow(QWidget *parent) :rn QMainWindow(parent),rn ui(new Ui::MainWindow)rnrn ui->setupUi(this);rn QDomDocument dom;rn QFile *file=new QFile("/home/qust/qt/XML/2.xml");rn if(file->open(QIODevice::ReadOnly|QIODevice::WriteOnly))rn rn dom.setContent(file);rnrn rnrn QDomNodeList email=dom.documentElement().elementsByTagName("email");rn qDebug()<close();rnrnrnrnMainWindow::~MainWindow()rnrn delete ui;rnrn不能修改XML文件,运行后打开xml文件出现rnrn[color=#000080]XML解析错误:废弃 document 元素之后的内容 rn位置:file:///home/qust/qt/XML/2.xml rn行:8,列:1:[/color]rn^rnrn该怎么修改xml 中节点的值呢??为什么不能使用setNodeValue()方法来修改接点的值???rnrn大家帮帮忙,谢谢!!!rn
linux修改ip,mac命令和qt中编程修改
一.修改MAC地址 linux修改Mac地址 有三种方法: 方法一: 1.关闭网卡设备 ifconfig eth0 down 2.修改MAC地址 ifconfig eth0 hw ether MAC地址 3.重启网卡 ifconfig eth0 up 方法二: 以上方法一修改后linux重启后MAC又恢复为原来的,为了下次启动时修改后的MAC仍有效,我们可以修改文件file:
修改表数据共有几种方法?
第一种 通过update 语句来修改 这个 已经知道了rn第二种 方法是怎么修改 听说是直接通过 查询出来的结果 在表中直接修改,如何操作 ,求解答
可以修改Widget的标题吗
我原来界面的标题是Widget,我想改成我实际程序功能的标题,要怎么改,请指教
怎么样在程序运行中修改用户控件中的对象?
比如做了个用户控件usercontrol1,里面有一文本框text1,怎么样在代码中改变text1.text属性?
求修改表中的数值方法
1.如disable_time字段中大于当前日期4天以上就修改profile字段=2 反之退出 rn例:disable_time时间是2011-1-25当前时间是2011-1-19 修改profile字段=2,disable_time时间是2011-1-23以前退出。rn2.如disable_time字段中小于当前日期3天就修改profile字段=1 如果disable_time字段日期小于等于当前时间退出rn例:disable_time时间是2011-1-20当前时间是2011-1-19 修改profile字段=1, disable_time时间是2011-1-18当前时间是2011-1-19 退出。
求一个修改语句
arnid atitle picrn1 aa bbrn2 cc ddrn3 dd rrrnrnrnbrnid btitle bpicrn1 cc eern2 aa ttrnrn我用修改是rnrn根据b btitle标题和a atitle一样修改a pic 值是 bpic值rnrn结果是rnarnid atitle picrn1 aa ttrn2 cc eern3 dd rr
求修改一个触发器
[code=sql]rnALTER TRIGGER TRIGGER_PREALARM_INSERT ON [A] rnFOR INSERT ASrnBEGINrnrn INSERT prealarmTmprn (rn itemNodeRecID,rn value,rn careDateTime,rn clientID,rn familyNM,rn firstNMrn ) rn SELECT rn tc.ItemNodeRecID,rn tc.Value,rn tct.CareDateTime,rn tct.ClientID,rn mc.ClientFamilyName,rn mc.ClientFirstNamern FROM Inserted tcrn LEFT JOIN CareTimeline tct ONrn tc.CareID = tct.CareIDrn LEFT JOIN ClientData mc ONrn mc.ClientID = tct.ClientIDrn LEFT JOIN prealarmCode yp ONrn tc.ItemNodeRecID = yp.itemNodeRecIDrn WHERErn tc.ModifyState = 1rn AND tct.ModifyState = 1rn AND (yp.itemType = 1 AND (CAST(tc.Value AS float) < CAST(yp.value1 AS float)rn OR CAST(tc.Value AS float) > CAST(yp.value2 AS float))rn OR (yp.itemType = 2 AND CAST(tc.Value AS float) = CAST(yp.value3 AS float)))rn rnEND rn[/code]rnrn现在这段是A的一个触发器,在增加一条记录的时候,会去做一个查询,如果符合条件,就插入到prealarmTmp表里。现在如果我想修改一下,要是A表删除记录的话,prealarmTmp表有条数据的话,也同时删掉。rn如果A表更新的时候,满足插入查询的话,如果prealarmTmp表记录已经存在,就做更新,要是不存在,就做插入,要是插入查询不满足的话,就把之前那条记录删除。rn可以在写在这 一个里面吗?
求修改一个正则表达式
我在10月6日时,在这里求了一个正则。rn当时如下rn-----------------------rn有字符串如 rn[i n="Department"]这里是[内容1],看看[/i] rn[i n="Group"]这里是内容[内容2],看看[/i] rn其中n=" "之间的内容是变化的 rn我想将其替换为 rn这里是[内容1],看看 这里是内容[内容2],看看 rnrn请教大家这个正则表达式该怎么写?谢谢先 rn------------------------rnvarlj朋友写了一个表达式rnvar str = '[i n="Department"]这里是[内容1],看看[/i]'+rn '[i n="Group"]这里是内容[内容2],看看[/i]';rnstr = str.replace( /\[(i.*?)\](.*?)\[\/i]/g,"<$1>$2");rnalert(str);rn------------------------rn之前运行很正常,今天忽然发现,如果内容中有换行的话,表达式就不正常了,rn比如rnvar str = '[i n="Department"]这里rn是[内容1],看看[/i]'+rn '[i n="Group"]这里是内rn容[内容2],看看[/i]';rnrnrn现在请问大家,内容中有换行的情况,该如何修改表达式。rn
求一个正则表达式的修改
写了一个正则表达式可以解析超链接,但是怎么解析指定的超链接啊。rn文本如下rn[code=java]var str:String = "认证在中国首倡计划生育地址";[/code]rn复制代码使用下面的正则表达式替换rnrn[code=java]str.replace(//g,"")[/code]复制代码可以得到下面的结果rn在中国首倡计划生育rn复制代码但是我想要的结果是只替换掉有class='url'这个超链接rn[code=java]认证在中国首倡计划生育[/code]复制代码
求mysql一个修改
我有一个表a1rn我复制出来一个a2rnrn现在是我 表a1 插入数据后 AUTO_INCREMENT自动加1rn我现在想让a2同步a1的AUTO_INCREMENT值rnrn我这样写ALTER TABLE `a2` AUTO_INCREMENT =`a1`.AUTO_INCREMENT rn不对!求助高手指点一下
求一个修改的方法。。
表Arnname telrna 110rnb 119rnrn表Brnid telrn1 112rn2 120rnrn表Crnname idrna 2rnb 1rnrn根据name把表b中的tel改成和表A中的一样,怎么弄?c表是A.name和B.id的对应关系
求修改一个存储过程
表结构:rn数量 比例rn100 1%rn200 2%rn300 3%rn。。。。rnrn参数:rn@数量 decimalrn@标志 intrn要求输入一个数量分段点和一个计算方法标志(两种类型),每个数量分段值都不固定,然后返回对应计算值,如输入(350,1)则返回350*3%=10.5,而输入(350,2)则返回 (200-100)*1%+(300-200)*2%+(350-300)*3%,也就是说当输入值达到表中某一数量时,如果标志为1则按一个比例计算,而标志为2时则要计算每个分段值,谢谢!rnrn[code=SQL]--> 测试数据:[tb]rnif object_id('[tb]') is not null drop table [tb]rncreate table [tb]([数量] int,[比例] varchar(2))rngorninsert [tb]rnselect 100,'1%' union allrnselect 200,'2%' union allrnselect 300,'3%'rnrnselect * from [tb]rnrn--存储过程rncreate proc proc_trans_compute @count decimal(18,2),@flag int,@compute decimal(18,2) outputrnasrndeclare @total decimal(18,2)rnif @flag = 1rnbeginrn select @compute = @count*(select top 1 cast(replace(比例,'%','') as int)*0.01rn from [tb] where [数量]<=@count order by [数量] desc)rnrnendrnelse if @flag = 2rnbeginrn select @total=sum([数量]),rn @compute=sum([数量]*cast(replace(比例,'%','') as int)*0.01)rn from [tb] trn where (select sum([数量]) from [tb] where [数量]<=t.[数量])<=@countrn if @total < @countrn beginrn select @compute=@compute+(@count-@total)*(select top 1 cast(replace(比例,'%','') as int)*0.01rn from [tb] where [数量]<=@count order by [数量] desc)rn endrnendrnrn--调用rndeclare @compute decimal(18,2)rnexec proc_trans_compute 350,2,@compute outputrnselect @computern------------------rn6.5rn[/code]rn前几天问了这个问题,后来发现这个存储过程计算结果不对,结果偏大应该是多算了,请帮忙修改一下或者提供新的,本人sql循环不熟悉又时间紧迫,谢谢了!
求修改一个函数
[code=SQL]rnCREATE FUNCTION dbo.f_MaxBH3()rnRETURNS intrnASrnBEGINrndeclare @maxbh1 intrndeclare @maxbh2 intrnselect @maxbh1 =max(cast(号码 as int)) from shenprnselect @maxbh2=max(convert(int,(case when left(号码,1)='c' then right(号码,len(号码)-1) else 号码 end)))+1 from shenp_v_brn'-----------------'rnRETURN case when @maxbh1 >= @maxbh2 then convert(varchar(10),@maxbh1+1) else convert(varchar(10),@maxbh2+1) endrnENDrn[/code]rnrn上面的函数写法如果数据表中有数据没有问题,可以正常使用,但如果数据表shenp_v_b中没有数据,就不会取出正确的编号;rn想在上面'-----------------'的部份加一个判断但是不知如何写,求解
求修改一个正则表达式!
如题。有个项目要求很简单,就是验证输入0-9和a-z,A-Z的数字和字母。rn现在的验证方法是:rn[code=C#]rnpublic static bool IsNumberOREnglish(string str)rn rn if (Regex.IsMatch(str, @"[0-9a-zA-Z]*$1,", RegexOptions.IgnoreCase))rn return true;rn elsern return false;rn rn[/code]rn本来觉得没啥问题。可是,用的时候发现诸如:@!#$%^&* 此类的符号,都返回true;无语了。。。。rn一直用的都是比较简单的这种判断,可能是对正则的理解不深,请指点一下!感谢!
求修改一个查询.
各表如下图:rn[img=\\192.168.1.140\我的文档\1.png][/img]rnrnrn运行下面的查询后,结果就无法对应.第一条是订购了的,第二条不应该有订购量的.rn[code=SQL]rnselect c.id as 预定id,a.构成id,a.产品编号,a.部品品番,a.客户品番,a.客户名称,rnrn a.是否下单,a.部品个数,a.部品总数,c.交货日期,sum(b.订购数量) as 订购数量 rnrn from composing a left outer join (select 预定id,产品编号,部品品番,sum(订购数量) as 订购数量 from pu_o group by 预定id,产品编号,部品品番) brnrn on ((a.产品编号=b.产品编号) and (a.部品品番=b.部品品番)) join destine c rnrn on a.构成id=c.构成id --and c.id=b.预定id-- AND b.产品编号=c.产品编号 rnrn -- where (b.订购数量 is null or a.部品总数-订购数量>0) --and (convert(varchar(10), getdate()+c.生产周期+c.采购周期+c.安全周期,120)>c.交货日期) and (a.社内生产='N')rnrn group by c.id,a.构成id,a.产品编号,a.部品品番,a.客户品番,a.客户名称,a.是否下单,a.部品个数,a.部品总数,b.订购数量,c.交货日期rnrn order by a.部品品番rn[/code]rn[img=\\192.168.1.140\我的文档\2.png][/img]
求修改一个正则表达式..
我想匹配所有字符(字母,数字,中文),用空格分割,我写了一个表达式,这样\b(\S+)(\S+)\brn但是这样写只能匹配到2个以上(含2个)的字符,一个字符的就被过滤掉了.比如"aa b cc d"这样,只能返回"aa cc",却不能返回单个字符的"b"和"d"都被过滤了,怎么修改才能让他也能匹配到单个字符呢?
ORA-12838: 无法在并行模式下修改之后读/修改对象
SQL> create table b (object_id number, object_name varchar2(200));表已创建。SQL> insert /+append/into b select object_id+4,substr(object_name,1,10) from dba_objects;已创建75317行。SQL> insert /+append/into b sel
PADS 直接修改 PCB,不用修改原理图
PADS Layout 里面有个 ECO 功能,也有个 ECO 模式,在这个模式下可以直接修改 PCB,删除期间、添加器件,也能修改网络。 所以可以直接修改 PCB,不用先修改原理图。 至于怎么进 ECO 模式,问度娘吧。
实现IOleCommandTarget接口,SetSite修改成员变量,Exec中获得成员变量,发现变量没被修改
做一个IE的按钮发现的问题,各位大虾帮忙看下。困扰了一下午。rn我在BHO类中实现了IOleCommandTarget和IObjectWithSitern我在BHO类中设置了一个变量 strPassrn public class BHO : IObjectWithSite, IOleCommandTargetrn rn string strPass=“hello boy”;rn public void SetSite(object site) rn System.Windows.Forms.MessageBox.Show(“hello”);rnrn strPass=“hello girl”rn rnrn public int Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, IntPtr pvaIn, IntPtr pvaOut)rn rn System.Windows.Forms.MessageBox.Show(strPass);rn rn rnrnrn启动了IE后,hello已经出现了,说明setsite已经执行。rn但是点击按钮后,依旧显示“hello boy”,而不是hello girl
使用QT更改一个widget对象中自己定义的公有成员变量出现的无法更改问题
本人是刚刚接触Qt不久的小菜鸡,弄了一个简单地操作数据库的程序,其中登录需要根据不同角色显示不同的窗口,并把登录账号作为参数传递到子窗口(因为后面我打算设计一个修改密码的功能),我的思路是:创建两个Qt设计师界面类的对象:Login和Customer,Login作登录窗口,其中定义客户窗口Customer c;而在Customer中我定义一个int型的公有成员变量ID,用来存储当前登录的用户ID(就是登录账号);登录窗口的登录按钮的槽函数会根据选择的角色以及输入的账号和密码是否正确来选择显示相应的操作界面(在这里我仅仅做了客户的),然后将成功登录时使用的ID,直接赋值给c.ID,然后关闭登录界面。rn 但是在我的试验中,我想把这个值显示在一个标签中,却在c窗口中显示[color=#FF0000]是一个随机数[/color],而我直接用c.ID=500,得到的结果依然是标签中显示的还是一个随机数,这也就意味着[color=#FF0000]我直接给公有成员变量赋值的语句根本没有起作用[/color],这是为什么,我又该怎么解决这个问题。我的数据库链接是成功的,而且登录功能已经能够实现。rnrn以下是我的部分代码(主函数和连接数据库的文件我就不发了):rnrnrn#ifndef LOGIN_Hrn#define LOGIN_Hrnrn#include rn#include rnrnnamespace Ui rnclass Login;rnrnrnclass Login : public QWidgetrnrn Q_OBJECTrnrnpublic:rn explicit Login(QWidget *parent = 0);rn ~Login();rnrnprivate slots:rn void on_pushButton_clicked();rnrnprivate:rn Ui::Login *ui;rn Customer c;rn;rnrn#endif // LOGIN_Hrnrnrn#include "login.h"rn#include "ui_login.h"rn#include rn#include rn#include rnrnLogin::Login(QWidget *parent) :rn QWidget(parent),rn ui(new Ui::Login)rnrn ui->setupUi(this);rnrnrnLogin::~Login()rnrn delete ui;rnrnrnvoid Login::on_pushButton_clicked()rnrn if(ui->comboBox->currentText()==tr("请选择登录角色"))rn rn QMessageBox::critical(0,tr("登录失败"),tr("请选择正确的登录角色"),QMessageBox::Cancel);rn rnrnrn if(ui->comboBox->currentText()==tr("超级管理员登录"))rn rn QSqlQuery query;rn bool suc=false;rn query.exec("SELECT * FROM Administrator");rn while(query.next())rn rn if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))rn rn QMessageBox::information(0,tr("登陆成功"),tr("超级管理员:%1 登陆成功").arg(query.value(0).toString()));rn this->close();rn suc=true;rn break;rn rn rn if(!suc)rn QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);rn rnrnrn if(ui->comboBox->currentText()==tr("调度管理员登录"))rn rn QSqlQuery query;rn bool suc=false;rn query.exec("SELECT * FROM Dispatcher");rn while(query.next())rn rn if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))rn rn QMessageBox::information(0,tr("登陆成功"),tr("调度管理员:%1 登陆成功").arg(query.value(2).toString()));rn this->close();rn suc=true;rn break;rn rn rn if(!suc)rn QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);rn rnrnrn if(ui->comboBox->currentText()==tr("车队管理员登录"))rn rn QSqlQuery query;rn bool suc=false;rn query.exec("SELECT * FROM Manager");rn while(query.next())rn rn if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))rn rn QMessageBox::information(0,tr("登陆成功"),tr("车队管理员:%1 登陆成功").arg(query.value(2).toString()));rn this->close();rn suc=true;rn break;rn rn rn if(!suc)rn QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);rn rnrn[color=#FF0000]//仅试验了客户这一块,出现了问题[/color]rn if(ui->comboBox->currentText()==tr("客户登录"))rn rn QSqlQuery query;rn bool suc=false;rn query.exec("SELECT * FROM Customers");rn while(query.next())rn rn if((query.value(0).toString()==ui->AdminEdit->text())&&(query.value(1).toString()==ui->PasswordEdit->text()))rn rn QMessageBox::information(0,tr("登陆成功"),tr("客户:%1 登陆成功").arg(query.value(2).toString()));rn this->close();rn //c.ID=query.value(0).toInt(); rn c.ID=10000;rn suc=true;rn break;rn rn rn if(suc)rn rn c.show();rn rn elsern QMessageBox::critical(0,tr("登录失败"),tr("账号或密码错误"),QMessageBox::Cancel);rn rnrn//Login.cpprnrnrn#ifndef CUSTOMER_Hrn#define CUSTOMER_Hrnrn#include rnrnnamespace Ui rnclass Customer;rnrnrnclass Customer : public QWidgetrnrn Q_OBJECTrnrnpublic:rn int ID;rn explicit Customer(QWidget *parent = 0);rn ~Customer();rnrnprivate:rn Ui::Customer *ui;rn;rnrn#endif // CUSTOMER_Hrnrnrn#include "customer.h"rn#include "ui_customer.h"rnrnCustomer::Customer(QWidget *parent) :rn QWidget(parent),rn ui(new Ui::Customer)rnrn ui->setupUi(this);rn ui->label->setText(tr("当前ID:%1").arg(ID));rnrnrnCustomer::~Customer()rnrn delete ui;rnrn//Customer.cpprnrnrn多谢大神帮助,感激不尽
求修改
#includern#includernrn#define MAXHIST 15rn#define MAXCHAR 128rnrnint main(void)rnrn int c, i;rn int len;rn int maxvalue;rn int cc[MAXCHAR];rnrn for(i = 0; i < MAXCHAR ; ++ i)rn cc[i] = 0;rn while((c == getchar()) != EOF)rn if(c < MAXCHAR)rn ++cc[c];rn maxvalue = 0;rn for(i = 1; i < MAXCHAR ; ++ i)rn if(cc[i] > maxvalue)rn maxvalue = cc[i];rnrn for(i = 1; i < MAXCHAR ; ++ i)rn rn if(isprint(1))rn printf("%5d - %c - %5d :", i , i , cc[i]);rn elsern printf("%5d - - %5d :", i , cc[i]);rn if(cc[i] > 0)rn rn if((len = cc[i] * MAXHIST / maxvalue) <= 0)rn len = 1;rn rn elsern len = 0;rn while(len > 0)rn rn putchar('*');rn -- len;rn rn putchar('\n');rn rn
反射修改私有成员变量例子
利用java反射机制修改类的私有成员的例子,如果需要了解反射机制的可以参考下。
修改表结构中的一个值
查看mysql> desc ts_weiba_post ; +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-
相关热词 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘 c#读写txt文件 c#挖地雷源代码 c#弹框选项 c# 移除 队列 c# 密码写入配置文件 c# 获取可用内存大小 c# 嵌入excel编辑