我正在创建一个GUI,用于存储和显示各种数据类型的对象,例如int,double,string和我创建的其他三个类(Rational,Date和Complex)。这些对象存储在相同类型的链接列表中。对于int,double和string,我不得不将存储用户输入的 QPlainTextEdit 的值存储到列表中并将它们显示在 QTextBrowser 中的问题,但是,我我不确定如何显示我在QTextBrowser中创建的类中的对象。有功能可以做到这一点吗?
我目前正在使用Rational类,该类以“ Rational(3,4);” 的形式接收对象,并将其显示为类似于“ 3/4之类的分数“ 。 我设法从用户输入中以“ 3/4”形式创建对象,并将其推入链接列表,但是我无法将其显示在我的QTextBrowser中。
//sample code
else if(ui->Rational_button->isChecked())
{
ui->main_display->setText("");
//Iterator that goes through the linked list to get the objects
LinkedList<Rational>::Iterator it = rationalvec.begin();
while(it != nullptr)
{
ui->main_display->append(QString::fromStdString(*it));
/* Trying to display all Rational
objects in the QTextBrowser */
++it;
}
}
//There should be an output like the following inside the QTextBrowser
4/5
2/3
7/9
9/11
//These are all Rational type objects
我遇到了“语义问题” 从'Rational'到QString / const std :: string 的转换不可行。我似乎找不到找到将这些对象转换或显示为QTextBrowser的方法。
编辑:这是Rational类
class Rational
{
private:
int numer; //IN/OUT - the numerator int
int denom; //IN/OUT - the denominator int
public:
/******************************
** CONSTRUCTOR & DESTRUCTOR **
******************************/
Rational() //Constructor
{
numer = 0;
denom = 1;
}
Rational(int number) //Constructor
{
numer = number;
denom = 1;
}
Rational(int number1, int number2) //Constructor
{
numer = number1;
denom = number2;
}
/***************
** ACCESSORS **
***************/
const Rational add(const Rational &) const;
const Rational subtract(const Rational &) const;
const Rational multiply(const Rational &) const;
const Rational divide(const Rational &) const;
void display() const
{
cout << numer << "/" << denom;
}
friend ostream& operator<<(ostream &, const Rational &) //FOR WIDGET
{
out << object.numer;
out << '/';
out << object.denom;
return out;
}
bool operator <(const Rational& ) //FOR WIDGET
{
if((numer/denom) < (other.numer/other.denom))
return true;
else
return false;
}
bool operator >(const Rational& ) //FOR WIDGET
{
if((numer/denom) > (other.numer/other.denom))
return true;
else
return false;
}
};
仅显示我正在使用的功能的功能定义,未显示定义的其他功能是该程序期间不使用的功能。
答案 0 :(得分:0)
您正在寻找类似的东西吗?
像这样编辑代码:
toString
函数:class Rational
{
...
public:
QString toString() [
return QString::number(numer) + "/" + QString::number(denom);
}
...
}
QTextBrowser
中显示:else if(ui->Rational_button->isChecked())
{
ui->main_display->setText("");
for( Rational r : rationalvec )
{
ui->main_display->append( r.toString() ); // Here use toString() to append
// it->toString() if iterator
}
}
希望它对您有帮助。
答案 1 :(得分:0)
我不确定如何显示我在QTextBrowser中创建的类中的对象。有功能可以做到这一点吗?
只有写一个。这是您的课程,因此提供这样的功能是您的工作。
如何进行此操作取决于类的使用方式。如果将您的类视为字符串是合理的(对于有理数来说似乎不太可能),则可以向string
隐式提供user-defined conversion。在其他情况下,您不应该提供隐式转换,因为隐式转换通常会妨碍编译器识别错误的能力。显式转换是另一种选择,但是人们通常会使用转换功能。 (标准库中的示例包括stringstream::str
和bitset::to_string
。)
您已经编写了大多数转换函数。您所需要做的就是将对象流式传输到std::stringstream
,然后调用该流的str()
方法。尽可能合理地重用您的代码。